我有一个字符串,我想去掉两个特定字符之间的所有内容。例如给定 "hello {there} world"
我想删除 {
和 }
之间的所有内容,包括那些分隔符,以获得 “ Hello World ”
。它需要处理该模式有任意数量的嵌套结果的场景。例如 “hello {there {mr} } world and {all} those who inhabit it”
应该变成 “hello world and those who inhabit it”
。
它似乎需要找到最里面的结果并向外工作以防止删除不正确的范围。例如,如果它只是找到第一个 {
和第一个 }
,它将生成 hello world and those who inhabit it
,这是不正确的。如果它要删除第一个 {
和最后一个 }
之间的所有内容,它将删除不应删除的内容并导致 "hello those谁居住其中”
。
那么如何实现呢?
可以使用 rangeOfString
API 获取字符串的第一次出现,并使用这些范围通过 stringByReplacingCharactersInRange
删除字符,或者可以使用正则表达式模式。我不确定如何最好地利用这些来获得必要的行为。
最佳答案
一个简单的计数算法应该可以工作:
- 为结果准备一个空字符串
- 将计数器初始化为零
- 一次一个地遍历输入字符串的字符
- 当字符是左大括号时,增加计数器
- 当字符是右大括号时,递减计数器
- 对于所有其他字符,请检查计数器。如果为零,则将字符复制到输出中;否则,跳过字符
这是一个示例实现:
let s = "hello {there {mr} } world and {all} those who inhabit it"
var res = ""
var count = 0
for c in s {
switch c {
case "{": count++; break;
case "}": count--; break;
default:
if count == 0 {
res += String(c)
}
break;
}
}
println(res)
修改它以确保 count
永远不会低于零,以确保大括号在输入中是平衡的。
关于ios - 删除 Swift 中两个特定分隔符之间的字符,处理嵌套结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803671/