提问人:John Glen 提问时间:11/16/2020 最后编辑:John Glen 更新时间:11/16/2020 访问量:230
如何在 Java 中为 Scanner 的现有分隔符添加逗号?
How do you add a comma to the existing delimiter of a Scanner in Java?
问:
我喜欢默认扫描仪的当前分隔符,但我想另外添加一个逗号。这样,像 “a , b” 这样的 String 将在第一次调用 next() 时返回 “a”,然后在第二次调用时返回 “b”。
我尝试了以下方法,但没有得到预期的结果:
Scanner lineScanner = new Scanner(line);
lineScanner.useDelimiter(lineScanner.delimiter().toString()+',');
它不再将制表符排除在对 next() 的调用返回的字符串之外。
如何添加逗号?
我还尝试使用正则表达式运算符:'|'。
lineScanner.useDelimiter(lineScanner.delimiter().toString()+"|,");
当我使用以下字符串调用 next() 3 次时,我没有得到正确的结果:
“JR NZ,.clearsound”
第一名:《Jr》
第二名:《新西兰》
第三:“”
为什么会这样?
答:
2赞
Andreas
11/16/2020
#1
文档,即 Scanner
的 javadoc 说:
扫描程序使用的默认空格分隔符由
Character.isWhitespace
识别。
Pattern
的 javadoc 说:
行为类似于布尔值is methodname 方法的类别(已弃用的方法除外)可通过相同的语法获得,其中指定的属性的名称为 javamethodname。
java.lang.Character
\p{prop}
\p{javaWhitespace}
相当于java.lang.Character.isWhitespace()
这意味着一开始,就好像你这样做了一样:Scanner
lineScanner.useDelimiter("\\p{javaWhitespace}+");
由于是一个字符类,因此您可以将其与其他字符合并,例如,要在逗号上拆分标记,请使用:\p{X}
[ ]
lineScanner.useDelimiter("[\\p{javaWhitespace},]+"); // separate on spaces and/or commas
注意:将两个或多个逗号放在一起不会返回空标记,例如 仍将在第 1 次调用时返回 ,然后在第 2 次调用时返回。"a , , b"
"a"
next()
"b"
评论
0赞
John Glen
11/17/2020
如果我想在除线器上添加括号怎么办? 和[
]
1赞
Andreas
11/17/2020
@JohnGlen 然后逃避他们:useDelimiter("[\\p{javaWhitespace}\\[\\],]+")
0赞
John Glen
11/17/2020
谢谢。我尝试了一次逃脱而不是两次。
评论