在一行文本中,我有 "*(,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/