我有一个字符串,比如“5 + 30”,我需要将它解析为令牌5,30,+。我怎么做?而不是“+”可以有任何算术运算符?我认为正则表达式会有所作为,但我不是他们。非常感谢你的帮助。
答案 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 。我建议你使用适当的解析器生成器来完成这样的任务。