我需要将特定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());
在找到后跟逗号的空格时输出一个新行,当找到逗号后跟空格时输出另一个新行。如何解决此问题,使其将连续分隔符视为一个分隔符?
我的意思是像第一个输出一样产生输出。
答案 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
和\\$
,仅使用\\$
,因为它更通用