Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从扫描器读取可变宽度标记?_Java_Java.util.scanner - Fatal编程技术网

在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实际上可以做我想做的事情。。