我尝试写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 进行比较
正如您所看到的,当想要应用测试时,它太长了。
我曾经使用过拆分,但它也拆分组合数字。喜欢 12
至1
和2
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/