我正在寻找一种方法来快速替换字符串中的单词。任何人都可以帮忙吗?

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

     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
}

最佳答案

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

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 ”和“天堂”),但很容易将其抽象为一个方法,以便您可以一次又一次地为更多对执行此操作:
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

关于string - 如何快速替换字符串中的特定单词?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27871337/

10-11 17:07