如何在 Java 中为 Scanner 的现有分隔符添加逗号?

How do you add a comma to the existing delimiter of a Scanner in Java?

提问人:John Glen 提问时间:11/16/2020 最后编辑:John Glen 更新时间:11/16/2020 访问量:230

问:

我喜欢默认扫描仪的当前分隔符,但我想另外添加一个逗号。这样,像 “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》

第二名:《新西兰》

第三:“”

为什么会这样?

Java java.util.scanner 分隔符

评论


答:

2赞 Andreas 11/16/2020 #1

文档,即 Scanner 的 javadoc 说:

扫描程序使用的默认空格分隔符由 Character.isWhitespace 识别。

Pattern 的 javadoc 说:

行为类似于布尔值is methodname 方法的类别(已弃用的方法除外)可通过相同的语法获得,其中指定的属性的名称为 javamethodnamejava.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
谢谢。我尝试了一次逃脱而不是两次。