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

时间:2015-01-10 00:12:11

标签: string swift replace

我正在寻找一种方法来替换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
}

2 个答案:

答案 0 :(得分:4)

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

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",这是正确答案;我们取代了&#34; hell&#34;这是一个词,但不是&#34;地狱&#34; in&#34;你好&#34;。请注意,我们也不区分大小写,这似乎是您的需求之一。

这个例子说明了如何只有一对(&#34;地狱&#34;和#34;天堂&#34;)但是很容易将它抽象成一个方法,这样你就可以一次又一次地做到进一步配对:

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

答案 1 :(得分:0)

最简单的可能就是:

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&#34的假设下;我可以找到具体的单词,但我不知道如何更换它...&#34;,所以它&#39 ;而不是找到一个&#34;字&#34;要定义的是另一个讨论。它只是替换已经找到的单词。

stringByReplacingCharactersInRange上的另一个词:@matt声明这是Cocoa交叉。在那种情况下,苹果公司说的是一个简单的谎 enter image description here

我培养了网络,但没有Apple的消息来源。只有NSString的Foundation方法。他们的斯威夫特书也是沉默的(在很多方面)。好吧,自约塞米蒂失败以来,我再也不相信苹果了。