仅替换NSString中子字符串的第一个实例

Eri*_*tto 36 iphone xcode objective-c nsstring

所以如果你有一个NSString:

@"My blue car is bigger than my blue shoes or my blue bicycle";
Run Code Online (Sandbox Code Playgroud)

我想要一个方法,只用蓝色替换第一个蓝色实例,以产生:

@"My green car is bigger than my blue shoes or my blue bicycle";
Run Code Online (Sandbox Code Playgroud)

怎么做到这一点?

Jon*_*pan 60

假设以下输入:

NSString *myString = @"My blue car is bigger then my blue shoes or my blue bicycle";
NSString *original = @"blue";
NSString *replacement = @"green";
Run Code Online (Sandbox Code Playgroud)

算法很简单:

NSRange rOriginal = [myString rangeOfString:original];

if (NSNotFound != rOriginal.location) {
    myString = [myString stringByReplacingCharactersInRange:rOriginal withString:replacement];
}
Run Code Online (Sandbox Code Playgroud)

  • 另一个传递'original = @"然后"``replacement = @"而不是"`也许是可取的. (24认同)
  • 如果原始字符串有拼写错误,不是我的问题.,p (3认同)

Kev*_*bbe 13

SWIFT 3和4更新:

extension String 
{
    func stringByReplacingFirstOccurrenceOfString(
            target: String, withString replaceString: String) -> String
    {
        if let range = self.range(of: target) {
            return self.replacingCharacters(in: range, with: replaceString)
        }
        return self
    } 
}
Run Code Online (Sandbox Code Playgroud)


ull*_*trm 10

此处发布的实现的更 Swift 版本。这个匹配replacingOccurrences(of:with:)Swift 5.1中的语法

extension String {

    func replacingFirstOccurrence(of target: String, with replacement: String) -> String {
        guard let range = self.range(of: target) else { return self }
        return self.replacingCharacters(in: range, with: replacement)
    }
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

let string = "I like bacon, please give me some more bacon!"
let newString = string.replacingFirstOccurrence(of: "bacon", with: "meat")
Run Code Online (Sandbox Code Playgroud)


Luc*_*nzo 9

在Swift中,以这种方式扩展String非常有用:

public extension String {

    func stringByReplacingFirstOccurrenceOfString(target: String, withString replaceString: String) -> String {
        if let range = self.rangeOfString(target) {
            return self.stringByReplacingCharactersInRange(range, withString: replaceString)
        }
        return self
    }

}
Run Code Online (Sandbox Code Playgroud)

通过这种方式你可以在任何地方打电话:

let s = "The red red cat".stringByReplacingFirstOccurrenceOfString("red", withString: "fat")
print(s) // "The fat red cat"
Run Code Online (Sandbox Code Playgroud)


Dan*_*idi 6

Swift 4版本:

func replacingFirstOccurrence(of string: String, with replacement: String) -> String {
    guard let range = self.range(of: string) else { return self }
    return replacingCharacters(in: range, with: replacement)
}
Run Code Online (Sandbox Code Playgroud)