我正在尝试创建一个 Java 程序,它能够在输入中缀表达式时遵循操作顺序。为了简化输入,我决定最好使用 regex
拆分整个字符串。表达。我已经能够拆分除 6 3
之外的所有内容融入自己String
splitLine
中的值大批。我的 SSCCE 尝试如下:
String line = "6 + 5 + 6 3 + 18";
String regex = "(?<=[-+*/()])|(?=[-+*/()])"; //Not spitting 6 3 correctly
String[] splitLine = line.split(regex);
for (int i=0; i<splitLine.length; i++) {
System.out.println(splitLine[i]);
}
输出:
6
+
5
+
6 3 //Error here
+
18
预期输出:
6
+
5
+
6 //Notice
3 //these
+
18
我尝试并尝试修改我的正则表达式,但都没有成功。谁能告诉我为什么我的正则表达式没有拆分 6
和 3
融入自己Strings
在splitLine
大批?
编辑: 只是想指出我这样做是为了好玩,而不是为了任何学校作业等。我只是想看看我是否可以编写一个程序来执行简单的中缀表达式。我确实同意有更好的方法可以做到这一点,如果表达式变得更复杂,我会遇到一些问题。但不幸的是,这就是我的书建议我执行此步骤的方式。
再次感谢所有的快速评论和回答!
最佳答案
试试这个:(?<=[-+*/()])|(?=[-+*/()]|\\s{2,})
您可以尝试在正则表达式中添加一个空格,当有 2 个或更多空格时这也会拆分,因为在这种情况下 6 和 3 由空格分隔,6 3
也会分开。如果匹配超过 2 个空格,此正则表达式将吐出字符串。您可以将最小空间数更改为 \s{min,}
在正则表达式中
关于java - Java中中缀表达式的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19086817/