我为String
类创建了一个小扩展,以方便地从中删除字符。这是它的样子:
mutating func drop(characters chars: [String]) {
for c in chars {
self = self.replacingOccurrences(of: c, with: "")
}
}
用法:
//string = ""Test"" (contains quotes), should be "Test" (w/ quotes)
string.drop(characters: ["\""])
现在,当我在一个字符串上调用此函数时,CPU会通过屋顶导致应用程序最终崩溃。
任何想法为什么?
谢谢!
我意识到以下代码也会导致巨大的CPU影响,因此显然不是我的扩展程序的问题,而是其他问题:
string = string.replacingOccurrences(of: "\"", with: "")
我发现了这个问题。我在while循环中执行所述语句,一旦superString
内的字符串不再存在就结束了。为实现这一目标,我从string
移除了replacingOccurrences
superString
。我意识到,在执行语句string
之后显然不像superString
中出现的那样。
简而言之:我必须在从string
删除superString
之后执行语句,否则while循环将永远不会结束,从而导致CPU影响&崩溃。
感谢您尽力帮助!
答案 0 :(得分:0)
建议避免多次改变字符串,这会导致性能下降,可能会像这样重写你的函数:
mutating func drop(charactersIn string: String) {
self = String(
self.characters.filter { !string.characters.contains($0) }
)
}
// And then for example:
string.drop(charactersIn: "\"tT")
答案 1 :(得分:0)
我在while loop
执行上述声明,一旦string
superString
内string
不再存在,就会结束。
为实现这一目标,我从replacingOccurrences
移除了superString
string
。我意识到,在执行语句superString
之后,显然不像它superString
中出现的那样。
长话短说:我必须在从while loop
删除字符串后执行该语句,否则while superString.contains(pattern: myPattern) {
var string = superString.searchFor(myPattern).get(0)!
textfile = textfile.replacingOccurrences(of: string, with: "")
string.drop(charactersInRegex: ["\""])
myArray.append(string)
}
永远不会结束导致CPU影响的问题&崩溃。
目视:
while superString.contains(pattern: myPattern) {
var string = superString.searchFor(myPattern).get(0)!
string.drop(charactersInRegex: ["\""])
myArray.append(string)
textfile = textfile.replacingOccurrences(of: string, with: "")
}
而不是
.so