Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何验证算术表达式?_Java - Fatal编程技术网

Java 如何验证算术表达式?

Java 如何验证算术表达式?,java,Java,我有一个程序,要求用户输入一个算术表达式,我如何验证表达式。例如:用户输入“1.2+3.4*(3.2+2.3)-12.1/3.4”,它将输出相同的表达式,因为它是有效的。如果用户输入“/1.2”,则表示输入无效,请输入正确的表达式。 “* 1.2”、“1.2 ** 3.4”、“1.2/3.4”和“1.2 +* 3.4”都认为无效。但是,“- 3+4”、“3+4”、“3+4”、“3+6”都是有效的。 请帮帮我 这是我到目前为止所拥有的 private static boolean validate

我有一个程序,要求用户输入一个算术表达式,我如何验证表达式。例如:用户输入“1.2+3.4*(3.2+2.3)-12.1/3.4”,它将输出相同的表达式,因为它是有效的。如果用户输入“/1.2”,则表示输入无效,请输入正确的表达式。 “* 1.2”、“1.2 ** 3.4”、“1.2/3.4”和“1.2 +* 3.4”都认为无效。但是,“- 3+4”、“3+4”、“3+4”、“3+6”都是有效的。 请帮帮我

这是我到目前为止所拥有的

private static boolean validate(String s) { 
    if (s.isEmpty()) { 
        return false;
    } else { 
      // remove all spaces 
      s = s.replaceAll("\\s+", ""); 
      // remove all repeated char 
      // check if string contains only numbers and +-*/ 
      String ValidChars = "+-*/().1234567890"; 
      boolean result = true; 
      for (char c : s.toCharArray()) { 
          if (ValidChars.indexOf(c) == -1) { 
              result = false; 
          } 
      } 

      return result; 
   } 
} 

您可以使用
导入javax.Script.*
的脚本引擎管理器类

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
现在你必须这样计算你的表达式

engine.eval(expression);//where expression is String in your case User Input
但要用
try catch
包围它,因为如果表达式无效,它将通过
ScriptException


因此,如果出现异常,则表示它不是有效的表达式。

递归下降解析器将很好地工作。请编写一些代码,即使它是错误的,并在此处展示所做的工作。如果您不做任何努力,没有人会浪费时间做您的家庭作业。@user3448414他的示例包含有效字符,但语法不正确;他需要一个语法解析器,比如递归下降或L解析器。谢谢,但我还是很困惑。我是java编程的初学者,你们能告诉我一些简单易懂的东西吗?