我在String上使用componentsSeparatedByString
将长字符串拆分为String数组,使用逗号(,)作为要拆分的字符串。问题是,一个组件是逗号字符。例如,字符串是“a,b,c ,,, 1,2,3”。在调用componentsSeparatedByString
之后,数组是[“a”,“b”,“c”,“”,“”,“1”,“2”,“3”]但我需要它是[“a” “,”b“,”c“,”,“,”1“,”2“,”3“]。幸运的是我可以修改字符串,但我真的不想将所有逗号更改为不同的字符。有没有一种方法可以“逃避”我需要的逗号作为一个组件,componentsSeparatedByString
不会分裂到那个中间的那个?
我尝试用\u{002C}
替换它,但它比那更聪明。仍然将其解释为逗号,因此它会分裂。
答案 0 :(得分:1)
如果您使用标准库中的componentsSeparatedByString
方法而不是split
,那么您可以通过记住最后一个元素是否为逗号来使用状态闭包以相当hacky的方式执行此操作然后不要连续两个分裂:
let s = "a,b,c,,,1,2,3"
var lastWasComma = false
let array = split(s.characters) { (c: Character)->Bool in
if c == "," {
lastWasComma = !lastWasComma
}
else {
lastWasComma = false
}
return lastWasComma
}.map(String.init)
debugPrint(array)
// prints ["a", "b", "c", ",", "1", "2", "3"]
(这是2.0 - 如果您使用1.2,请从最后删除.characters
和map
,因为字符串可以在2.0之前直接切片。