【问题标题】:Getting a strange error for substringWithRange收到 substringWithRange 的奇怪错误
【发布时间】:2025-11-26 10:00:02
【问题描述】:

substringWithRange 函数有个奇怪的问题。

我有一个长度为 22 的 NSString。

当我这样做时:

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

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

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

它给出了一个超出范围的异常。

'NSRangeException',原因:'* -[NSCFString substringWithRange:]: Range or index out of bounds'

那么,怎么了?

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 不,[str rangeOfString:@"Café"] 返回长度为 4。这就是我们使用 NSString 而不是原始字节的原因。因为我们不必关心编码和内存表示。
      最近更新 更多