在Java中从扫描器读取可变宽度标记?
给出如下表达式:在Java中从扫描器读取可变宽度标记?,java,java.util.scanner,Java,Java.util.scanner,给出如下表达式: 4*x+16-455 我需要能够单独检索令牌。因此,我需要: 4 * x + 16 - 455 我不能只使用“nextInt()”,因为它是一个字符串-我如何才能绕过这个问题?我曾考虑过由操作符进行拆分,然后在两个操作符之间交替进行,这应该是可行的,但似乎应该有一种更简单的方法来做到这一点 读取整个字符串并将其拆分为标记的最简单方法。您可以通过regexp选择令牌。您的示例可以通过以下regexp解析为令牌: String s = "4*x+16-455"; Pattern
4*x+16-455
我需要能够单独检索令牌。因此,我需要:
4
*
x
+
16
-
455
我不能只使用“nextInt()”,因为它是一个字符串-我如何才能绕过这个问题?我曾考虑过由操作符进行拆分,然后在两个操作符之间交替进行,这应该是可行的,但似乎应该有一种更简单的方法来做到这一点 读取整个字符串并将其拆分为标记的最简单方法。您可以通过regexp选择令牌。您的示例可以通过以下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或者更好地使用解释器模式使你的解决方案更可读。我的问题是-如何定义令牌?看起来StringTokenizer实际上可以做我想做的事情。。