replaceCharactersInRange不按预期工作?

时间:2013-11-11 16:08:51

标签: ios objective-c nsmutablestring

我有一个NSMutableString,它包含字符串“我有∞小时和∞最小备用。”并且我试图通过执行

将第一个∞替换为“0”
NSMutableString *timeString = [NSMutableString stringWithString:@"And I have ∞ Hours and ∞ Min to spare."];
NSLog(@"%@",timeString);
[timeString replaceCharactersInRange:NSMakeRange(11,12) withString:@"0"];
NSLog(@"%@",timeString);

然而,它不是仅替换第一个∞,而是替换短语“∞小时和”

以下是在控制台中打印的内容:

And I have ∞ Hours and ∞ Min to spare.
And I have 0∞ Min to spare.

我不明白为什么删除超出指定范围的字符。

4 个答案:

答案 0 :(得分:5)

范围的第二个参数是长度,而不是结束位置,因此如果您尝试替换1个字符,则应该在那里传递1。

答案 1 :(得分:5)

范围由(位置,长度)

组成

你说的是从11开始,从那里开始跨越12个字符。 你;有效地制作11到22的范围。

你需要:

NSMakeRange(11,1)

答案 2 :(得分:4)

NSMakeRange中的第二个值是范围的长度,而不是结尾的位置。

尝试

NSMakeRange(11,1)

答案 3 :(得分:1)

这样做..!

NSMutableString *timeString = [NSMutableString stringWithString:@"And I have ∞ Hours and ∞ Min to spare."];

NSRange range = [timeString rangeOfString:@"∞"];
if (range.location != NSNotFound)
{
[timeString replaceCharactersInRange:range withString:@"0"];
}