如何在括号前后添加空格?

时间:2015-03-08 06:40:31

标签: java regex

我正在尝试使用.replace().replaceAll()方法在运算符之间添加空格。基本上,我已经使我的代码读取中缀字符串并根据空白区分/检查元素。例如,(3+3)会向我吐出错误,但我的程序可以计算( 3 + 3 )。我在输入时遇到了麻烦:

!(!((5-10)*(4-(9/2)) > 60)-(((5*7)/(4/(5+3)))=15))<((4-3)=1)

我编码:

input[i] = input[i].replace("(", "( ").replace(")", " )").replace("!", "! ")
                   .replaceAll("(\\S)/(\\S)", "(\\d) / (\\d)");

我刚刚开始使用除法部分(其他replace()方法用于更简单的测试用例)。但是当我将9/2转换为后缀表达式时,它会将(d) / (d)替换为input[i] = input[i].replaceAll("([()!])(?! )", "$1 ").replaceAll("([()!])(?<=(\\d))\\)", " $1"); 。我真的可以使用正则表达式的一些帮助。

修改1:

{{1}}

我的第二个replaceAll()应该找到一个以数字开头的右括号。但它运作正常。我编码不正确吗?

1 个答案:

答案 0 :(得分:1)

您可以使用字符类将多个replace方法缩减为单个replaceAll,同时您的replaceAll需要正确使用反向引用:

input[i] = input[i].replaceAll("([()!])(?! )", "$1 ")
                   .replaceAll("(\\d+)/(\\d+)", "$1 / $2");