java - 应该在 java.util.Scanner 中使用什么模式来获取下一个字符串标识符?

标签 java pattern-matching java.util.scanner

在一行文本中,我有 "*(,identifier1*(identifier2"我想读取标识符,定义为单词字符 ([a-zA-Z_0- 9]).

我应该使用哪种模式?我想到了使用:

scanner.next( "[\\w]+");

但我收到异常 java.util.InputMismatchException

最佳答案

Scanner 的默认定界符是空格,因此 Scanner 对象中的第一个(也是唯一一个)标记是整个字符串 "*(,identifier1*(identifier2"。您要尝试的字符串通过调用 next("[\\w]+") 获取,这会导致抛出异常,因为它与您的输入不匹配。

你所追求的更像是findInLine("\\w+"):

Scanner scan = new Scanner("*(,identifier1*(identifier2");
System.out.println(scan.findInLine("\\w+"));
System.out.println(scan.findInLine("\\w+"));

产生:

identifier1
identifier2

或者,如果您想将输入字符串拆分为一个或多个非 (ascii) alpha-num-chars(和 _),请尝试:

Scanner scan = new Scanner("*(,identifier1*(identifier2").useDelimiter("\\W+");
while(scan.hasNext()) {
  System.out.println(scan.next());
}

产生与以前相同的输出。

请注意,我使用了大写的 W,它等于:

\W == [^\w] == [^a-zA-Z0-9_]

关于java - 应该在 java.util.Scanner 中使用什么模式来获取下一个字符串标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4909615/

相关文章:

java - "Cannot instantiate the type...."

java - 如何使用 Java Regex 查找字符串中所有重复的字符序列?

java - Play2 - 模板 -> 递增

Scala 模式匹配默认守卫

java - 将此模式转换为 Pattern.matches(..) 的正则表达式

Java无法获取数组列表来打印?

Java:使用扫描仪分隔符作为标记

Java,使用扫描仪时如何验证输入?

java - Java 中的 JAR 级(程序集级)类作用域

java - 如何在heroku上为java服务器制作procfile?