如何将逗号添加到 Java 中扫描仪的现有分隔符?

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

我喜欢默认扫描仪的当前分隔符,但我想另外添加一个逗号。这样,像“a,b”这样的字符串将在第一次调用 next() 时 return “a”,然后在第二次调用时“b”。

我尝试了以下方法,但没有得到预期的结果:

Scanner lineScanner = new Scanner(line);
lineScanner.useDelimiter(lineScanner.delimiter().toString()+',');

它不再将制表符留在调用 next() 的 return 字符串之外。

如何添加逗号?

我还尝试使用正则表达式运算符:“|”。

lineScanner.useDelimiter(lineScanner.delimiter().toString()+"|,");

当我使用以下字符串调用 next() 3 次时,我没有得到正确的结果:

" jr nz, .clearsound"

第一名:“jr”

第二名:“nz”

第三:“”

为什么会这样?

文档,即 Scanner 的 javadoc 说:

The default whitespace delimiter used by a scanner is as recognized by Character.isWhitespace.

Pattern 的 javadoc 说:

Categories that behave like the java.lang.Character boolean ismethodname methods (except for the deprecated ones) are available through the same \p{prop} syntax where the specified property has the name javamethodname.

\p{javaWhitespace} Equivalent to java.lang.Character.isWhitespace()

这意味着 Scanner 开始时就像您这样做一样:

lineScanner.useDelimiter("\p{javaWhitespace}+");

由于 \p{X} 是一个字符 class,您可以将它与其他字符合并到一个 [ ] 中,例如要在逗号上拆分标记,请使用:

lineScanner.useDelimiter("[\p{javaWhitespace},]+"); // separate on spaces and/or commas

注意: 将两个或多个逗号放在一起不会 return 空标记,例如"a , , b" 将在第一次调用 next() 时 return "a",然后在第二次调用时 "b"