我正在寻找一种方法来替换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
}
答案 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交叉。在那种情况下,苹果公司说的是一个简单的谎
我培养了网络,但没有Apple的消息来源。只有NSString的Foundation方法。他们的斯威夫特书也是沉默的(在很多方面)。好吧,自约塞米蒂失败以来,我再也不相信苹果了。