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