不像string.components(separatedBy: ...)
我想在生成的数组中保留分隔符.代码更具说明性
let input = "foo&bar|hello" let output = string.tokenize(splitMarks: ["&", "|"]) let desiredResult = ["foo", "&", "bar", "|", "hello"]
标准库中是否有任何功能可以执行此操作?如果不是,我怎么能实现这样的功能?
为此,你需要遍历String
并检查它的每一个characters
是否是令牌.你可以做extension
的String
了,像这样.
extension String { func stringTokens(splitMarks: Set) -> [String] { var string = "" var desiredOutput = [String]() for ch in self.characters { if splitMarks.contains(String(ch)) { if !string.isEmpty { desiredOutput.append(string) } desiredOutput.append(String(ch)) string = "" } else { string += String(ch) } } if !string.isEmpty { desiredOutput.append(string) } return desiredOutput } }
现在你可以像这样调用这个函数.
let input = "foo&bar|hello" print(input.stringTokens(splitMarks: ["&", "|"]))
产量
["foo", "&", "bar", "|", "hello"]