给定一个表达式,例如:

4*x+16-455


我需要能够分别检索令牌。因此,我需要:

4
*
x
+
16
-
455


我不能只使用“ nextInt()”,因为它都是一个字符串-如何解决这个问题?我考虑过由运营商进行拆分,然后在两者之间交替工作,但似乎应该有一种更简单的方法来做到这一点。

最佳答案

读取整个字符串并将其拆分为令牌的最简单方法。您可以通过regexp选择令牌。您的示例可以通过以下正则表达式解析为令牌:

String s = "4*x+16-455";
Pattern p = Pattern.compile("([0-9]+|[a-z]+|[*//+//-])");
Matcher m = p.matcher(s);
while(m.find()) {
   System.out.println(m.group());
}


输出:

4
*
x
+
16
-
455


如果您需要带有更多不同令牌的更聪明的分隔符,请考虑修改正则表达式或更好地使用解释器模式以使您的解决方案更具可读性。

09-27 15:36