背景
例如,假设我有:
let tgt = "Europa"
let token = "ro"
let a = split_on( tgt, token ) // how to implement this?
let exp_res = [ "Eu", "ro", "pa" ]
我考虑使用String.componentsSeparatedByString
,但拆分位置丢失(即我们不知道token
是否出现在开头,结尾,或者是否连续多次出现。
编辑:其他示例
split_on( "roroEuropa", "ro" ) // [ "ro", "ro", "Eu", "ro", "pa" ]
split_on( "rorEuropa", "ro" ) // [ "ro", "rEu", "ro", "pa" ]
split_on( "Euroroparo", "ro" ) // [ "Eu", "ro", "ro", "pa", "ro" ]
答案 0 :(得分:1)
这可能是一种解决方案。你可以把它写成一行, 但是我把它拆分成单独的陈述来证明它是如何工作的:
let tgt = "roEuroroparo"
let token = "ro"
// Split into an array of strings:
let t1 = tgt.componentsSeparatedByString(token)
println(t1) // [, Eu, , pa, ]
// Convert each string to an array:
let t2 = map(t1) { [$0] }
println(t2) // [[], [Eu], [], [pa], []]
// Interpose the token:
let t3 = [token].join(t2)
println(t3) // [, ro, Eu, ro, , ro, pa, ro, ]
// Remove empty strings:
let result = filter(t3) { countElements($0) > 0 }
println(result) // [ro, Eu, ro, ro, pa, ro]