如何分割字符串如1 + 2-3 / 4

时间:2012-11-28 17:29:36

标签: java string expression

我正在尝试用java构建计算器。为了构建它,我必须将每个整数分成数组。我使用split("\\+")在“+”符号之前和之后划分了每个整数。

但其他运营商呢?使用“+”时可以使用“ - ”,“/”,“*”吗?

3 个答案:

答案 0 :(得分:2)

好吧,回答你的问题(你必须通过\\逃避一些运营商):

"1+2-3/4".split("[+\\-*/]")

然而,这会丢弃运营商,因此您需要更复杂的东西。您也可能想要支持浮点数。最后但并非最不重要的是,一旦完成解析,请记住运算符优先级。

答案 1 :(得分:0)

在这种情况下,您可以使用

for(char ch : "1+2-3/4".toCharArray()) {
    System.out.println(ch);
}

如果您想要多位数字和负数,即-1+-2

,您需要编写一个简单的解析器

过去我使用enum based state machine来解析测试。一旦有了令牌流,就可以建立优先规则。

答案 2 :(得分:0)

由于您已将问题区域提及为计算器,我认为使用堆栈来拆分操作数和运算符并评估表达式会更合适。

检查许多此类案例中使用的着名算法here