gpt4 book ai didi

java - 将普通中缀表达式转换为标记数组列表

转载 作者:行者123 更新时间:2023-12-01 05:27:05 25 4
gpt4 key购买 nike

我想转换类似的东西

233 + 4 *(4-8) +5

至 [233,+,4,*,(,4,-,8,),+,5]

其中后者是一个字符串数组。

到目前为止我已经:

 String s = "233 + 4 *(4-8) +5";
for(int i = 0; i<s.length(); i++)
{
int j = i + 1;
String sub = s.substring(i,j);
String checkdigit = s.substring(i,j);
while(checkdigit.matches("\\d|\\.") && j<s.length())
{
checkdigit = s.substring(j,j+1);
j++;
}
System.out.print(sub);
if(!sub.equals(" ")) expression.add(sub);
}

但是我遇到了空指针异常。有人可以帮我纠正这个问题吗?

此外,如果有人可以帮助我解析它,以便它也接受负值(如 -5),那将会很有帮助。

编辑:顺便说一下。适用于 double (如 5.0)

编辑2:

如果有人知道任何可以替换我的代码的 Java API 类,请说明我如何用它们替换我的代码。

最佳答案

解析算术表达式比乍看起来要复杂一些(例如很难区分减号和负数)。

虽然您可以编写自己的解析器,但我建议您通过向其提供所需的语法来使用通用解析器(例如 ANTLRJavaCC ),或者寻找更简单的算术特定库(例如 JEP 或一些开源库)等价)。

这里是一个帮助您使用 ANTLR 解析算术表达式的链接: http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3

关于java - 将普通中缀表达式转换为标记数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9551287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com