我想要转换一些东西,比如
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类,请展示如何用它们替换我的代码。
发布于 2012-03-04 14:30:17
解析算术表达式比最初看起来要复杂一些(例如,很难区分减号和负数)。
虽然你可以编写自己的解析器,但我建议你使用一个通用的解析器(例如ANTLR或JavaCC),提供你想要的语法,或者寻找一个更简单的特定于算术的库(例如JEP或一些开源的等价物)。
下面是一个帮助您使用ANTLR解析算术表达式的链接:http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3
发布于 2013-02-23 03:15:22
org.nfunk.jep.JEP适用于大多数复杂的算术解析,非常适合您的需求。请确保您正在下载最新的jar (我相信是3.x.x)以了解其用法。2.x不支持一些显而易见的功能!
https://stackoverflow.com/questions/9551287
复制相似问题