Joh*_*oth 4 java pattern-matching java.util.scanner
在一行文本中,我有" *(,identifier1*(identifier2",我想读取标识符,定义为单词字符([a-zA-Z_0-9]).
我应该使用哪种模式?我想过使用:
scanner.next( "[\\w]+");
Run Code Online (Sandbox Code Playgroud)
但我得到了例外 java.util.InputMismatchException
扫描仪的默认分隔符是空格,因此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+"));
Run Code Online (Sandbox Code Playgroud)
产生:
identifier1
identifier2
Run Code Online (Sandbox Code Playgroud)
或者,如果要将输入字符串拆分为一个或多个非(ascii)alpha-num-chars(和_),请尝试:
Scanner scan = new Scanner("*(,identifier1*(identifier2").useDelimiter("\\W+");
while(scan.hasNext()) {
System.out.println(scan.next());
}
Run Code Online (Sandbox Code Playgroud)
它产生与以前相同的输出.
请注意,我使用了大写W,它等于:
\W == [^\w] == [^a-zA-Z0-9_]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2112 次 |
| 最近记录: |