使用while循环时无限循环并用Swift替换字符串

时间:2015-04-15 06:00:56

标签: string swift replace

我需要编写一个脚本来替换字符串直到没有匹配。 但它没有用。 这是我的剧本:

var datastring = NSString(data: data, encoding: NSUTF8StringEncoding)
while((datastring?.containsString(",,")) != nil)
{
   datastring = datastring!.stringByReplacingOccurrencesOfString(",,", withString: ",")
}

4 个答案:

答案 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.

示范:http://swiftstub.com/22979236/

答案 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。