如何在java中为扫描器的现有分隔符添加逗号?

9avjhtql  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(341)

我喜欢默认扫描器的当前分隔符,但是我想另外添加一个逗号。这样,像“a,b”这样的字符串将在第一次调用next()时返回“a”,然后在第二次调用时返回“b”。
我尝试了以下方法,但没有得到预期的结果:

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

它不再将制表符保留在调用next()返回的字符串中。
我该怎么加逗号呢?
我还尝试使用regex操作符:“|”。

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

当我用以下字符串调用next()3次时,我没有得到正确的结果:
“jr nz,.clearsound”
第一名:“jr”
第二名:“新西兰”
第三名:“我的朋友”
为什么会这样?

oiopk7p5

oiopk7p51#

文档,即 Scanner 说:
扫描仪使用的默认空白分隔符由 Character.isWhitespace .
的javadoc Pattern 说:
行为类似 java.lang.Character boolean ismethodname方法(不推荐使用的方法除外)可以通过相同的方法使用 \p{prop} 指定属性名为javamethodname的语法。 \p{javaWhitespace} 相当于 java.lang.Character.isWhitespace() 也就是说 Scanner 一开始好像你做了:

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

\p{X} 是字符类,可以将其与中的其他字符合并 [ ] ,例如,要同时拆分逗号上的令牌,请使用:

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

注意:将两个或更多逗号放在一起不会返回空标记,例如。 "a , , b" 还是会回来的 "a" 第一次打电话给 next() ,然后 "b" 第二个电话。

相关问题