【问题标题】:replace characters in NSString替换 NSString 中的字符
【发布时间】:2011-07-26 16:54:20
【问题描述】:

我想在我的代码中擦除一个 NSString 对象(将每个字符替换为 0)。

为此,我尝试了这个:

NSString *myString;
for (int i=0; i<[myString length]; i++) 
{
myString[i] = 0;
}

但它无法编译:myString[i] = 0;

行的“赋值中的类型不兼容”

我明白,但我不能使用函数 stringByReplacingOccurancesOfString,因为它会创建一个新对象,我想替换我的第一个对象中的字符。

有什么帮助吗?

【问题讨论】:

  • 告诉我们你想要实现什么,因为你所做的有点奇怪,在大多数字符串编码中,0 并不是一个真正的有效字符,它用于终止字符串,尽管 NSString 是如何做到的这是它的业务。除非你的意思是 '0' 字符。也许你可能想使用一个 char 数组来构建你的字符串,然后当你完成后创建一个 NSString 。

标签: objective-c ios memory nsstring


【解决方案1】:

NSString 是不可变的,这意味着它的内容一旦创建就无法更改。为此,您有 NSMutableString

此外,您无法使用以下语法访问 NSStringNSMutableString 中的字符:

myString[i] = 0;

NSStrings 和NSMutableStrings 是对象,您可以通过向对象发送消息来处理对象。例如,您有 characterAtIndex: 方法返回给定索引处的字符,或者 NSMutableStringreplaceOccurrencesOfString:withString:options:range: 将给定范围内所有出现的给定字符串替换为另一个给定字符串。

【讨论】:

  • also,also: myString[i] 返回类型 unichar,0 是整数类型,这大概解释了编译器无用的错误
  • 很好的详细解释。 +1
  • @albertamg 感谢您的回答。我将使用 NSMutableString。
【解决方案2】:

根据定义,NSString 是一个不可变的类,所以它里面的数据是不可改变的。

您正在寻找实现以下方法的NSMutableString 类:

replaceOccurrencesOfString:withString:options:range:

您可以使用它来替换您发送该消息的对象中的字符或子字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多