基于多个字符串分隔符分割字符串的高效算法

我想知道是否有一种有效的方法可以根据也是字符串的分隔符将字符串拆分为多个字符串。例如。updateStr = "23+45 = 56 0" , 分隔符 = ["+"," ","="]

结果 = [23,45,56,0]

我在 swift 中尝试了以下代码:

for i in 0..<delimiter.count {
    let res = updateStr.components(separatedBy: delimiter[i])
    updateStr = res.joined(separator: "unique%")
 }
splitTxt = updateStr.components(separatedBy: "unique%")

这有效,但由于分隔符将被动态接收,我想要一个更好的方法。有没有什么有效的方法可以避免多个循环来解决这个问题?不涉及快速实例方法的具有更有效解决方案的算法也将受到赞赏。感谢您的回答,但

更清楚地说,我不仅想要字符,还想要字符串作为分隔符:

例如2。updateStr = "我喜欢和朋友一起玩" , delimiters = ["li"," "la","ie"]

结果 = ["I","ke p","ying with fr","nds"]

回答

做这种事情的有效方法是使用 Set:

let equation = "23+45 = 56 0"
let delimiters : [Character] = ["+"," ","="]
let setOfSeparators = Set(delimiters)
let result = equation.split {setOfSeparators.contains($0)}
print(result)

这是有效的,因为contains在 Set 上非常快,所以成本可以忽略不计,我们只隐式地循环一次原始字符串。

另一方面,您可以利用 Cocoa CharacterSet 类。为此,我想说:

let equation = "23+45 = 56 0"
let delimiters = ["+"," ","="]
let characterSet = CharacterSet(charactersIn: delimiters.joined())
let result = equation.components(separatedBy: characterSet).filter {!$0.isEmpty}
print(result)

另一种有趣的方法是使用扫描仪(我认为这些都没有得到充分利用):

let equation = "23+45 = 56 0"
let delimiters = ["+"," ","="]
let characterSet = CharacterSet(charactersIn: delimiters.joined())
let scanner = Scanner(string: equation)
var result = [String]()
while let word = scanner.scanUpToCharacters(from: characterSet) {
    result.append(word)
    scanner.scanCharacters(from: characterSet)
}
print(result)


以上是基于多个字符串分隔符分割字符串的高效算法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>