Java 中中缀表达式的正则表达式问题



我正在尝试创建一个能够在输入中缀表达式时遵循操作顺序的 Java 程序。为了简化输入,我决定最好使用 regex 表达式拆分整个字符串。我已经能够在 splitLine 数组中将除6 3以外的所有内容拆分为它们自己的String值。 我的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

我已经尝试并尝试修改我的正则表达式,但没有成功。谁能告诉我为什么我的正则表达式没有将63拆分为splitLine数组中自己的Strings

编辑:只是想指出我这样做是为了好玩,这不是为了任何类型的学校工作等。我只是想看看我是否可以编写一个程序来执行简单的中缀表达式。我确实同意有更好的方法来做到这一点,如果表达式变得更加复杂,我会遇到一些问题。但不幸的是,这就是我的书建议我接近这一步的方式。

再次感谢所有快速评论和回答!

试试这个: (?<=[-+*/()])|(?=[-+*/()]|\s{2,})

您可以尝试在正则表达式中添加一个空格,当有 2 个或更多空格时,这也将拆分,因为在这种情况下,6 和 3 由空格分隔,6 3也将分开。 如果匹配超过 2 个空格,此正则表达式将吐出字符串。您可以更改正则表达式中s{min,}的最小空间数

以下正则表达式将匹配您当前的输入。

s(w+|[-+*/()])

要点是从列表中搜索空格,后跟单词或特定字符。

输出

 6
 +
 5
 +
 6
 3
 +
 18

也许你可以使用这样的东西吗?

String line = "6 + 5 + 6  3 + 18";
String regex = "(?<=[-+*/() ])|(?=[-+*/() ])";   //Added space to character class
String[] splitLine = line.split(regex);
for (int i=0; i<splitLine.length; i++) {
    if (splitLine[i].trim().equals("")) // Check for blank elements
        continue;
    System.out.println(splitLine[i].trim());
}

或者你可以在(?<=\d)\s+(?=\d)上拆分字符串以获得6 + 5 + 63 + 18

最新更新