我有一个字符串,我想删除两个特定字符之间的所有内容。例如,给定"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 who inhabit it"
。
那怎么能实现呢?
可以使用rangeOfString
API来获取第一次出现的字符串,并使用这些范围通过stringByReplacingCharactersInRange
删除字符,或者可以使用正则表达式模式。我不确定如何利用这些来获得必要的行为。
答案 0 :(得分:2)
直接的计数算法应该有效:


以下是一个示例实现:
&#xA;&#xA;< code> let s =“hello {there {mr}} world和{all}那些居住的人”&#xA; var res =“”&#xA; var count = 0&#xA; for c in s {&# XA;切换c {&#xA; case“{”:count ++;打破;&#XA; case“}”:count--;打破;&#XA;默认:&#XA;如果count == 0 {&#xA; res + = String(c)&#xA; }&#XA;打破;&#XA; }&#xA;}&#xA; println(res)&#xA;&#xA;&#xA;
修改此项以确保 count
永远不要低于零,以确保输入中的大括号是平衡的。