2016-05-13 10 views
0

特定のScannerオブジェクトの区切り文字を、新しい行、任意の連続するスペース、カンマ文字、およびドル記号文字に設定する必要があります。スキャナuseDelimiter文字列パラメータ?

私はこのコードを使用しています:

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つの区切り文字として扱うには、どうすればこの問題を解決できますか?

私は最初の出力のように出力を生成することを意味します。

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:ません

答えて

1

は、あなたがこのようないくつかの連続したセパレータを、持っている可能性があることを示すために、正規表現の末尾に+を追加します正規表現で\\n\\$を使用する必要がある場合は、より一般的な\\$を使用してください。

+0

ありがとう –

関連する問題