解析计算令牌

时间:2011-01-11 17:42:11

标签: java

我有一个字符串,比如“5 + 30”,我需要将它解析为令牌5,30,+。我怎么做?而不是“+”可以有任何算术运算符?我认为正则表达式会有所作为,但我不是他们。非常感谢你的帮助。

5 个答案:

答案 0 :(得分:2)

我假设您正在尝试编写某种算术处理器,因此我建议您使用像ANTLR这样的解析器生成器。它有一个关于编写算术语法的教程。

Parser生成器非常通用,因此对您的项目来说可能有点过分,但它仍然值得一看。了解如何(更重要的是,何时)使用解析器生成器总是有用的。

答案 1 :(得分:0)

通常您会使用扫描仪。以下是用java编写的扫描程序示例:http://download.oracle.com/javase/tutorial/essential/io/scanning.html

你也可以使用java.util.Scanner - 这是教程: http://www.java-tips.org/java-se-tips/java.util/scanning-text-with-java.util.scanner-3.html

答案 2 :(得分:0)

适用于您的正则表达式是:

[0-9]+|[^0-9]+

您可以使用java String match或Matcher类为您完成工作

您可以将[^ 0-9] +部分替换为您要支持的运算符集,例如:

[0-9]+|[+-/*]

答案 3 :(得分:0)

您可以查看pattern以获取良好的文档。 你的字符串将对应[0-9]+\p{Punct}{1}[0-9]+之类的内容 关于如何使用它的文档有很多例子

答案 4 :(得分:0)

以下是使用Scanner类的示例:

Scanner s = new Scanner("53+12-1+12");
String token;
while (null != (token = s.findInLine("\\d+|[+-]")))
    System.out.println(token);

输出:(ideone.com demo

53
+
12
-
1
+
12

但是请注意,如果您正在尝试评估表达式,那么这将是有限的帮助,因为您仍然需要处理运算符优先级和可能的parenthisation 。我建议你使用适当的解析器生成器来完成这样的任务。

相关问题