为substringWithRange获取一个奇怪的错误

时间:2011-02-20 12:11:25

标签: iphone objective-c ios

我对substringWithRange函数有一个奇怪的问题。

我有一个长度为22的NSString。

当我这样做时:

NSString *result = [myString substringWithRange:NSMakeRange(3, 21)];

一切都很好。但是当我试图从中间得到一些东西时,比如:

NSString *result = [myString substringWithRange:NSMakeRange(11, 14)];

它提供了一个超出范围的例外。

  

'NSRangeException',原因:' * - [NSCFString substringWithRange:]:范围或索引越界'

那么,出了什么问题?

2 个答案:

答案 0 :(得分:12)

NSRange不是“从索引到索引”。它是“从索引长度”。

为什么第一个有效?我不知道。我想实际上你的字符串不是22个字符,而是24个字符。

答案 1 :(得分:0)

NSRange返回开始位置和长度。为什么长度代替结束位置?因为例如在字符串Night Café中,代码[str rangeOfString:@"Café"]将返回长度5,因为Café在内存中将看起来像Cafe´(内存中的5个字节用于4个字母的单词)。