Objective-C-从字符串中删除最后一个字符


Answers:


418

在您的控制器类中,创建一个操作方法,您将在Interface Builder中将按钮连接到该方法。在该方法内,您可以像这样修剪字符串:


if ([string length] > 0) {
    string = [string substringToIndex:[string length] - 1];
} else {
    //no characters to delete... attempting to do so will result in a crash
}






如果您只想用一种有趣的方式在一行代码中执行此操作,则可以将其编写为:

string = [string substringToIndex:string.length-(string.length>0)];

*解释精美的单行代码片段:

如果要删除的字符(即字符串的长度大于0),则
     (string.length>0)返回,1 从而使代码返回:
          string = [string substringToIndex:string.length-1];

如果没有要删除的字符(即,字符串的长度)字符串不大于0)
     (string.length>0)返回,0 从而使代码返回:
          string = [string substringToIndex:string.length-0];
     防止崩溃。


8
您的解决方案存在1个错误。它应该是[string substringToIndex:[string length]-1];
Jim Correia,2009年

“字符串”是指“ string.text”还是仅字符串名称
Omar

谢谢吉姆,我想现在还太早算术。:) Omar,字符串是指一个名为string的变量,其中包含要修改的文本。您可以查看文档,了解通过磁盘上的文件或应用程序中的数据创建NSString对象的不同方法。
马克·夏邦诺

1
@DonalRafferty确保您的字符串不是零
quantumpotato

字符串为nil没关系-调用返回整数值的方法将在Obj-C中返回0(请注意,对于浮点返回值而言,情况并非如此)。因此,if语句等同于询问string != nil && [string length] > 0。很有可能是Donal的字符串变量被过度释放。
Marc Charbonneau 2012年

53

如果它是NSMutableString(由于您是动态更改它,我建议您这样做),则可以使用:

[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];

8

此处给出的解决方案实际上并未考虑多字节Unicode字符(“组合字符”),并可能导致无效的Unicode字符串。

实际上,包含声明的iOS头文件substringToIndex包含以下注释:

提示:与rangeOfComposedCharacterSequencesForRange一起使用:避免破坏合成字符

了解如何rangeOfComposedCharacterSequenceAtIndex:正确删除最后一个字符。


6

文档是您的朋友,NSString支持substringWithRange可以缩短字符串的调用,您可以返回缩短的字符串。您不能修改NSString其不可变的实例。如果您有一个NSMutableStringis方法deleteCharactersInRange,该方法可以修改字符串

...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...

1
NSMakeRange有时可以使填充范围结构看起来更加优雅。
dreamlax

@Harald,substringWithRange:返回NSString*。注意指针。
Thomas Nadin 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.