replaceCharactersInRange不按预期工作?

Ale*_*iop 0 objective-c nsmutablestring ios

我有一个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);
Run Code Online (Sandbox Code Playgroud)

但是,它不是仅替换第一个∞,而是替换短语"∞小时"和

这是在控制台中打印出来的内容:

And I have ? Hours and ? Min to spare.
And I have 0? Min to spare.
Run Code Online (Sandbox Code Playgroud)

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

rde*_*mar 5

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


Inf*_*mes 5

范围由(位置,长度)组成

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

你需要:

NSMakeRange(11,1)
Run Code Online (Sandbox Code Playgroud)