我正在尝试使用.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()应该找到一个以数字开头的右括号。但它运作正常。我编码不正确吗?
答案 0 :(得分:1)
您可以使用字符类将多个replace
方法缩减为单个replaceAll
,同时您的replaceAll
需要正确使用反向引用:
input[i] = input[i].replaceAll("([()!])(?! )", "$1 ")
.replaceAll("(\\d+)/(\\d+)", "$1 / $2");