从Java中的扫描程序读取可变宽度标记?

时间:2013-11-03 17:41:12

标签: java java.util.scanner

给出如下表达式:

4*x+16-455

我需要能够单独检索令牌。因此,我需要:

4
*
x
+
16
-
455

我不能只使用“nextInt()”因为它是一个字符串 - 我怎么能绕过这个?我考虑过运算符分割,然后在两者之间交替应该工作,但似乎应该有一种更简单的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

读取整个字符串并将其拆分为标记的最简单方法。您可以通过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

如果您需要更多具有许多不同令牌的聪明分割器,请考虑修改regexp或更好地使用Interpreter模式使您的解决方案更具可读性。