我需要编写一个脚本来替换字符串,直到没有匹配。然而,它没有用。这是我的脚本:
var datastring = NSString(data: data, encoding: NSUTF8StringEncoding)
while((datastring?.containsString(",,")) != nil)
{
datastring = datastring!.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
您当前的代码只需检查containsString
返回值还是返回nil
。基本上与检查datastring
是否nil
相同。只要它不nil
,无限循环就会启动。
简化和修复代码:
while datastring?.containsString(",,") == true {
datastring = datastring?.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
如果要检查两者,请使用以下命令:
while (datastring != nul) && (datastring.containsString(",,")) {
datastring = datastring.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
它将首先检查它是否不是 nil,然后检查它是否包含选定的字符串(在这种情况下,该字符串是",,")。我相信如果你的对象是 nil 并且你首先检查它是否包含一些字符串,它会崩溃你的应用程序。
字符串是否包含 ","→ no(即 false)。假与零不同。这就是为什么你陷入了一个无限循环。
如果需要,您可能需要进行if
测试。或者,您可以直接使用 stringByReplacingOccurrencesOfString
方法。
var str = "Hello,, playground,, this is a test string."
str = str.stringByReplacingOccurrencesOfString(",,", withString: ",")
println(str) // Hello, playground, this is a test string.
它将替换所有出现的s。
循环编辑:
var str : NSString = "Hello,,, playground,,,,,, this is ,,,,a test string."
while (str.containsString(",,") == true) {
str = str.stringByReplacingOccurrencesOfString(",,", withString: ",")
} // 3 times
println(str) // Hello, playground, this is a test string.
示范 : http://swiftstub.com/22979236/
是不是因为您有一个 NSString 并且替换方法返回一个字符串(也许它会让字符串和 NSString 之间的桥接有点混乱?),但您可以通过以下方式完成这项工作:
let datastring = "Hello,, Hello,,,"
let data = datastring.dataUsingEncoding(NSUTF8StringEncoding)
var str = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String
while str.rangeOfString(",,") != nil
{
str = str.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
str // Hello, Hello,
这确保了我们坚定地处于字符串的领域,并且只使用字符串方法而不是 NSString 方法。
如果您想继续使用 NSString,以下内容也有效:
let datastring = "Hello,,,,,, Hello,,,,,,,"
let data = datastring.dataUsingEncoding(NSUTF8StringEncoding)
var str:NSString = NSString(data: data!, encoding: NSUTF8StringEncoding)!
while str.containsString(",,") {
str = str.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
str // "Hello, Hello,"
这意味着你完全远离了可选,这是NSString初始化器返回的内容,但如果你搜索StackOverflow,就会有关于containsString不在文档中的警告,直到iOS8才被包含(这似乎在这里得到证实),即不适用于iOS7。我没有深入研究这个问题,但如果你支持 iOS7,这是值得探索的。
注意:为了简洁起见,我只对 String 使用了强制转换(以及数据的强制解包),您将测试这些以确保两者都不返回 nil。