我正在寻找一种方法来快速替换字符串中的单词。任何人都可以帮忙吗?
到目前为止,这是我所拥有的,我可以找到特定的词,但我不知道如何替换它...
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/