首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将普通、中缀表达式转换为标记的数组列表

将普通、中缀表达式转换为标记的数组列表
EN

Stack Overflow用户
提问于 2012-03-04 08:47:54
回答 2查看 415关注 0票数 1

我想要转换一些东西,比如

233 +4 *(4-8) +5

到233,+,4,*,(,4,-,8,),+,5

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

到目前为止,我有:

代码语言:javascript
复制
 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类,请展示如何用它们替换我的代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-04 14:30:17

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

虽然你可以编写自己的解析器,但我建议你使用一个通用的解析器(例如ANTLRJavaCC),提供你想要的语法,或者寻找一个更简单的特定于算术的库(例如JEP或一些开源的等价物)。

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

票数 0
EN

Stack Overflow用户

发布于 2013-02-23 03:15:22

org.nfunk.jep.JEP适用于大多数复杂的算术解析,非常适合您的需求。请确保您正在下载最新的jar (我相信是3.x.x)以了解其用法。2.x不支持一些显而易见的功能!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9551287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档