我需要编写一个脚本来替换字符串直到没有匹配。 但它没有用。 这是我的剧本:
var datastring = NSString(data: data, encoding: NSUTF8StringEncoding)
while((datastring?.containsString(",,")) != nil)
{
datastring = datastring!.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
答案 0 :(得分:1)
您当前的代码只是检查containsString
是返回值还是nil
。基本上与检查datastring
是否为nil
相同。每当它不是nil
无限循环开始时。
简化和修正代码:
while datastring?.containsString(",,") == true {
datastring = datastring?.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
答案 1 :(得分:0)
字符串是否包含“,,”→否(即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.
答案 2 :(得分:0)
如果你想同时检查两个,请使用:
while (datastring != nul) && (datastring.containsString(",,")) {
datastring = datastring.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
首先检查它是否为nil然后是否包含所选字符串(在这种情况下,该字符串为“,,”)。我相信如果你的对象是零,你首先检查它是否包含一些字符串,它会使你的应用程序崩溃。
答案 3 :(得分:0)
我不知道是不是因为你有一个NSString而且replace方法返回一个String(也许它会在String和NSString之间发送桥接有点乱码?),但是你可以按照以下方式使这个工作: / p>
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,
确保我们坚定地处于String的范围内,并且只使用String方法而不是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,"
这意味着你完全远离了optionals,这是NSString初始化程序返回的,但是如果你搜索StackOverflow,那么有关于containsString的警告不在文档中,并且直到iOS8(似乎是confirmed here)才被包含在内,即不使用iOS7。我没有更深入地研究这个问题,但如果你支持iOS7,这是值得探索的事情。
注意:为了简洁,我只使用强制转换为String(以及强制展开数据),IRL你要测试这些以确保它们都没有返回nil。