如何替换 swift 中字符串中的特定单词?

How can i replace a specific word in a string in swift?

我正在寻找一种方法来替换 swift 中字符串中的单词。有人可以帮忙吗?

这是我目前所拥有的,我可以找到具体的词,但我不知道如何替换它...

     var str = "helo, playgound"

     var findWords = ["helo","playgound"]
     var replaceWords = ["hello","playground"]

extension String {
    var wordList:[String] {
        return "".join(componentsSeparatedByCharactersInSet(NSCharacterSet.punctuationCharacterSet())).componentsSeparatedByString(" ")
    }
}

func stringToArray() -> Array<String> {
    var arr = str.wordList
    return arr
}

func correction(var _arr:Array<String>) -> String{

    for var i = 0; i < _arr.count; i++ {
            if str.lowercaseString.rangeOfString(findWords[i]) != nil {
                println("exists")
        }
      }
  return str
}

最简单的可能是这个:

let statement = "Swift is hard."
let swiftRange = statement.startIndex..<advance(statement.startIndex, 5)
let newStatement = statement.stringByReplacingCharactersInRange(swiftRange, withString: "Objective-C")
// now newStatement = "Objective-C is hard."

经过较长的评论之旅:以上内容是在 OP "I can find the specific word, but i do not know how to replace it..." 的假设下进行的,因此并不是要找到一个 "word" 来定义它,这是另一个讨论。这只是替换一个已经找到的词。

关于 stringByReplacingCharactersInRange 的另一个词:@matt 表示这是 Cocoa cross-over。在那种情况下,Apple 是在撒谎:

我培育了网络,但没有 Apple 消息来源说明任何事情。只有 NSString 的 Foundation 方法。他们的 Swift 书也无声(在很多方面)。好吧,自从 Yosemite-fail.

之后,我不再相信苹果了

这取决于您对 "word" 的定义。如果您正在寻找 "word" 的智能内置概念,最简单的解决方案可能是使用 NSRegularExpression,它知道 "word" 边界在哪里:

var s = NSMutableString(string:"hello world, go to hell")
let r = NSRegularExpression(
    pattern: "\bhell\b",
    options: .CaseInsensitive, error: nil)!
r.replaceMatchesInString(
    s, options: nil, range: NSMakeRange(0,s.length),
    withTemplate: "heaven")

之后,s就是"hello world, go to heaven",就是正确答案;我们替换了 "hell" 是一个单词,但没有替换 "hello" 中的 "hell"。请注意,我们也在不区分大小写地进行匹配,这似乎是您的需求之一。

这个例子展示了如何只做一对("hell" 和 "heaven"),但是很容易将它抽象成一个方法,这样你就可以为更多的对一次又一次地做:

var str = "helo, playgound"

var findWords = ["helo", "playgound"]
var replaceWords = ["hello", "playground"]

func correct(str:String, orig:String, repl:String) -> String {
    var s = NSMutableString(string:str)
    let r = NSRegularExpression(
        pattern: "\b\(orig)\b",
        options: .CaseInsensitive, error: nil)!
    r.replaceMatchesInString(
        s, options: nil, range: NSMakeRange(0,s.length),
        withTemplate: repl)
    return s
}

for pair in Zip2(findWords,replaceWords) {
    str = correct(str, pair.0, pair.1)
}

str // hello, playground