gpt4 book ai didi

objective-c - 使用 substringWithRange : gives "index out of bounds" 提取字符串

转载 作者:太空狗 更新时间:2023-10-30 03:09:49 27 4
gpt4 key购买 nike

当我尝试从一个较大的字符串中提取一个字符串时,它给我一个范围或索引越界错误。我可能忽略了这里非常明显的东西。谢谢。

NSString *title = [TBXML textForElement:title1];
TBXMLElement * description1 = [TBXML childElementNamed:@"description" parentElement:item1];
NSString *description = [TBXML textForElement:description1];
NSMutableString *des1 = [NSMutableString stringWithString:description];

//search for <pre> tag for its location in the string
NSRange match;
NSRange match1;
match = [des1 rangeOfString: @"<pre>"];
match1 = [des1 rangeOfString: @"</pre>"];
NSLog(@"%i,%i",match.location,match1.location);
NSString *newDes = [des1 substringWithRange: NSMakeRange (match.location+5, match1.location-1)]; //<---This is the line causing the error

NSLog(@"title=%@",title);
NSLog(@"description=%@",newDes);

更新:范围的第二部分是长度,而不是端点。哦!

最佳答案

传递给 NSMakeRange 的第二个参数不是结束位置,而是范围的长度。

所以上面的代码试图在<pre> 之后的第一个字符处找到开始 的子字符串结束 之后的 N 个字符,其中 N 是整个字符串中之前最后一个字符的索引

示例:在字符串 "wholeString<pre>test</pre>noMore" 中",'test' 的第一个 't' 的索引为 16(第一个字符的索引为 0),因此 'test' 的最后一个 't' 的索引为 19。上面的代码将调用 NSMakeRange(16, 19) ,这将包括 19 个字符,从 'test' 的第一个 't' 开始。但是从 'test' 的第一个 't' 到字符串末尾只有 15 个字符,包括在内。因此,您超出了范围异常。

您需要的是调用具有适当长度的 NSRange。为了上述目的,它会是 NSMakeRange(match.location+5, match1.location - (match.location+5))

关于objective-c - 使用 substringWithRange : gives "index out of bounds" 提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com