我想转换类似
的内容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)也会有所帮助。
编辑: 顺便说一下。用于双打(如5.0)
编辑2:
如果有人知道任何可以替换我的代码的Java API类,请说明如何用它们替换我的代码。
答案 0 :(得分:0)
解析算术表达式比先前看起来要复杂一些(例如,很难区分减号和负号)。
虽然您可以编写自己的解析器,但我建议您使用通用解析器(例如ANTLR或JavaCC),为其提供所需的语法或查找更简单的算术特定库(例如JEP或某些开源等价物。)
这是一个帮助您使用ANTLR解析算术表达式的链接: http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3
答案 1 :(得分:0)
org.nfunk.jep.JEP适用于大多数复杂的算术解析,非常适合您的要求。确保您正在下载最新的jar(我相信3.x.x)。 2.x不支持一些明显的功能!