扫描仪useDelimiter字符串参数?

时间:2016-05-13 20:37:20

标签: java

我需要将特定Scanner对象的分隔符设置为:新行,任意数量的连续空格,逗号字符和美元符号字符。

我正在使用此代码:

Scanner s = new Scanner("just\ndo      it$bro,tm");
s.useDelimiter("\\n|,|\\s*\\s|\\$");
System.out.println(s.next());
System.out.println(s.next());
System.out.println(s.next());
System.out.println(s.next());
System.out.println(s.next());

它的输出是:

just newline
do newline
it newline
bro newline
tm newline

它将所需的字符标记为预期的分隔符,但是当遇到两个连续的分隔符时,System.out.println(s.next());会在该时刻输出一个新行。

例如,如果Scanner s = new Scanner("just\ndo it$bro,tm");更改为Scanner s = new Scanner("just\ndo , it$bro,tm");,则输出变为:

just newline
do newline
newline
newline
it newline

System.out.println(s.next());在找到后跟逗号的空格时输出一个新行,当找到逗号后跟空格时输出另一个新行。如何解决此问题,使其将连续分隔符视为一个分隔符?

我的意思是像第一个输出一样产生输出。

1 个答案:

答案 0 :(得分:1)

在正则表达式的末尾添加+,表示您可以有多个连续的分隔符,如下所示:

Scanner s = new Scanner("just\ndo   ,   it$bro,tm");
s.useDelimiter("(,|\\s|\\$)+");
System.out.println(s.next());
System.out.println(s.next());
System.out.println(s.next());
System.out.println(s.next());
System.out.println(s.next());

<强>输出:

just
do
it
bro
tm

NB:无需在正则表达式中使用\\n\\$,仅使用\\$,因为它更通用