如何根据令牌将字符串分解为数组?

时间:2014-12-29 19:55:15

标签: string swift

背景

例如,假设我有:

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" ]

1 个答案:

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