java - 简单的数学表达式解析

标签 java regex string arraylist

我尝试写equals覆盖功能。我认为我写得对,但问题在于解析表达式。我的数组类型为 ArrayList<String>它从键盘获取输入然后评估结果。我可以与另一个 ArrayList<String> 进行比较变量,但我如何比较 ArrayList<String>String 。例如,

String expr = "(5 + 3) * 12 / 3";
ArrayList<String> userInput = new ArrayList<>();
userInput.add("(");
userInput.add("5");
userInput.add(" ");
userInput.add("+");
userInput.add(" ");
userInput.add("3");
.
.
userInput.add("3");
userInput.add(")");

然后将 userInput 转换为 String,然后使用 equals 进行比较 正如您所看到的,当想要应用测试时,它太长了。 我曾经使用过拆分,但它也拆分组合数字。喜欢 1212

public fooConstructor(String str) 
{
   // ArrayList<String> holdAllInputs; it is private member in class
   holdAllInputs = new ArrayList<>();

    String arr[] = str.split("");

    for (String s : arr) {
        holdAllInputs.add(s);
    }
}

正如您所期望的,它没有给出正确的结果。如何解决?或者有人可以帮助编写正则表达式以根据需要正确解析它? 作为输出我得到:

(,5, ,+, ,3,), ,*, ,1,2, ,/, ,3 

而不是

(,5, ,+, ,3,), ,*, ,12, ,/, ,3

最佳答案

可以帮助您的正则表达式

"(?<=[-+*/()])|(?=[-+*/()])"

当然,您需要避免不需要的空格。

我们来了,

String expr = "(5 + 3) * 12 / 3";
.
. // Your inputs
.
String arr[] = expr.replaceAll("\\s+", "").split("(?<=[-+*/()])|(?=[-+*/()])");
for (String s : arr) 
{
    System.out.println("Element : " + s);
} 

请看我的实验:http://rextester.com/YOEQ4863

希望有帮助。

关于java - 简单的数学表达式解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577678/

相关文章:

Python 正则表达式陷阱

java - 如何从 Firebase 数据库获取此数据

c++ - 使用递归在 C++ 中取消混搭字符串

java - 从每一行中删除 ","并放入 java 中的 arraylist

java - 为什么某个 IDE 不允许我为 JComboBox 添加参数?

java - 使用 ThreadPoolExecutor 在同一线程中的 Runnable 实例之间共享数据

javascript - 如何仅使用小写字母验证模式

java - Java 中的字符串提取/操作

string - 允许一定数量的错误匹配的最大精确匹配

java - java 6或7编译器是否改进了 str.startWith ("a") 并将其转换为 str.charAt(0) == 'a' 如果它包含一个字符的字符串?