【问题标题】:Objective-C - Remove last character from stringObjective-C - 从字符串中删除最后一个字符
【发布时间】:2010-11-08 02:31:56
【问题描述】:

在 iOS 的 Objective-C 中,如何使用按钮操作删除字符串的最后一个字符?

【问题讨论】:

    标签: ios objective-c string cocoa cocoa-touch


    【解决方案1】:

    在您的控制器类中,创建一个操作方法,您将在 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)];
    

    *花哨的一行代码sn-p的解释:

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

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

    【讨论】:

    • 您的解决方案存在 1 个错误。它应该是 [string substringToIndex:[string length] - 1];
    • “string”是指“string.text”还是只是字符串名称
    • 谢谢吉姆,我猜算术时间太早了。 :) Omar,string 指的是一个名为 string 的变量,其中包含您要修改的文本。您可以查看文档以了解创建 NSString 对象的不同方法,无论是从磁盘上的文件还是从应用程序中的数据。
    • @DonalRafferty 确保你的字符串不是 nil
    • 如果 string 为 nil 也没关系——调用返回整数值的方法将在 Obj-C 中返回 0(注意浮点返回值并非如此)。这样 if 语句就相当于询问string != nil && [string length] > 0。 Donal 的字符串变量可能被过度释放。
    【解决方案2】:

    如果它是一个 NSMutableString(我会推荐它,因为您正在动态更改它),您可以使用:

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

    【讨论】:

      【解决方案3】:

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

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

      提示:与 rangeOfComposedCharacterSequencesForRange 一起使用:以避免分解组合字符

      请参阅how to use rangeOfComposedCharacterSequenceAtIndex: 以正确删除最后一个字符。

      【讨论】:

        【解决方案4】:

        文档是你的朋友,NSString 支持调用substringWithRange,它可以缩短你拥有的字符串并返回缩短的字符串。您不能修改 NSString 的实例,它是不可变的。如果你有一个NSMutableString,那么有一个名为deleteCharactersInRange 的方法可以就地修改字符串

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

        【讨论】:

        • NSMakeRange 有时可以使填充范围结构看起来更优雅。
        • @Harald, substringWithRange: 返回NSString*。记下指针。
        猜你喜欢
        • 2011-01-19
        • 2017-08-19
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 2021-12-11
        相关资源
        最近更新 更多