删除成对的括号({},(),[])和其中的文本,并用Java

时间:2015-11-12 02:22:48

标签: java regex string spaces brackets

我有一些字符串和字符串操作后的预期输出,

字符串ab =(abc)def - > def //在删除其中的成对括号和文本后返回字符串。

String cd = abc(def - > abc def //用空格替换不成对的括号。

String ef = abcdef) - > abcdef //用空格替换不成对的括号。

字符串gh =(abc)def(xyz) - > def //在删除其中的成对括号和文本后返回字符串。

String ij =((abc)def(xyz)) - >空//返回空字符串作为成对括号,并删除其中的文本。

字符串kl =(abc)def(xyz(abc) - > def xyz //删除成对的括号和文本并返回其余部分。

我需要对提供的字符串执行以下字符串操作。

对于成对的方括号(),{},[],要删除括号和其中的文本,并且必须用空格替换未配对的括号。 我尝试了许多正则表达式和设置计数器。但是没有按预期工作。

有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您无法在java中使用单个正则表达式来解决此任务,因为java中不支持递归正则表达式(尽管它们位于perl中)。

解决此任务的正确方法是遵循Karthik Jeganathan解决方案 - 例如创建简单的代码来解析你自己的字符串。

虽然您可以将regex与while循环结合使用来解决此问题。我必须警告你,这将是非常低效的。这是代码:

int previousInputLength = 0;
String input;
while(input.length() != previousInputLength) {
     previousInputLength = input.length();
     input = input.replaceAll("\\([^()]*\\)", "");
}
input = input.replace("(", " ").replace(")", " ");

答案 1 :(得分:0)

  1. 使用堆栈推送字符
  2. 按下一个右括号,然后弹到开始括号
  3. 在所有角色的末尾弹出,直到开始括号并推动一个空格 重复,直到堆栈为空。