【问题标题】:Replace a character at a certain index in NSString替换 NSString 中某个索引处的字符
【发布时间】:2012-02-15 16:55:32
【问题描述】:

我正在寻找一种方法来替换 NSString 的某个索引处的字符。

例如:myString = @"******";

我想将第三个“*”替换为“A”,使字符串看起来像这样:myString = @"**A***";

我怎样才能做到这一点?

提前致谢

【问题讨论】:

标签: iphone objective-c xcode replace nsstring


【解决方案1】:

试试这个:

NSString *str = @"*******";
str = [str stringByReplacingCharactersInRange:NSMakeRange(3, 1) withString:@"A"];
NSLog(@"%@",str);

【讨论】:

    【解决方案2】:

    其实有两种选择;

    由于 NSString 是只读的,你需要在 NSString 上调用 mutableCopy 来获取一个可以实际更改的 NSMutableString,然后在 NSMutableString 上调用 replaceCharactersInRange:withString: 来替换其中的字符。如果您想多次更改字符串,这会更有效。

    在 NSString 上还有一个 stringByReplacingCharactersInRange:withString: 方法,它返回一个新的 NSString 并替换了字符。这对于单个更改可能更有效,但需要您为每个替换创建一个新的 NSString。

    【讨论】:

      【解决方案3】:

      试试这个示例方法

      -(NSString *)string:(NSString*)string ByReplacingACharacterAtIndex:(int)i byCharacter:(NSString*)StringContainingAChar{
      
          return [string stringByReplacingCharactersInRange:NSMakeRange(i, 1) withString:StringContainingAChar];
      
      }
      

      如果你的字符串是“testing”并且你希望第一个字符“t”应该被替换为“*”而不是调用方法

      [self string:yourString ByReplacingACharacterAtIndex:0 byCharacter:@"*"]
      

      奔跑吧

      【讨论】:

        【解决方案4】:

        如果您不介意使用一点 C,请使用以下内容:

        char *str = (char *)[myString UTF8String];
        str[2] = 'A';
        myString = [NSString stringWithUTF8String:str];
        

        当然,在执行此操作之前,您应该绝对确定 myString 至少有 3 个字符。除此之外,这是一种非常快速有效的方法。

        【讨论】:

        • 适用于 iOS,但不适用于 MacOS。我相信 MacOS 返回新分配的字符串。
        【解决方案5】:

        我的贡献来自响应的快速扩展:

        extension NSString{
        
            func replacingACharacterAtIndex(pIndex : Int, pChar : Character) -> NSString{
        
                return self.stringByReplacingCharactersInRange(NSRange(location: pIndex, length: 1), withString: String(pChar))
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2014-03-31
          • 2020-12-24
          • 1970-01-01
          • 2017-06-04
          • 2020-02-09
          • 1970-01-01
          • 2011-10-20
          • 1970-01-01
          相关资源
          最近更新 更多