我对substringWithRange函数有一个奇怪的问题。
我有一个长度为22的NSString。
当我这样做时:
NSString *result = [myString substringWithRange:NSMakeRange(3, 21)];
一切都很好。但是当我试图从中间得到一些东西时,比如:
NSString *result = [myString substringWithRange:NSMakeRange(11, 14)];
它提供了一个超出范围的例外。
'NSRangeException',原因:' * - [NSCFString substringWithRange:]:范围或索引越界'
那么,出了什么问题?
答案 0 :(得分:12)
NSRange不是“从索引到索引”。它是“从索引长度”。
为什么第一个有效?我不知道。我想实际上你的字符串不是22个字符,而是24个字符。
答案 1 :(得分:0)
NSRange返回开始位置和长度。为什么长度代替结束位置?因为例如在字符串Night Café
中,代码[str rangeOfString:@"Café"]
将返回长度5,因为Café
在内存中将看起来像Cafe´
(内存中的5个字节用于4个字母的单词)。