Scanner
の次のトークンに特定の文字列が含まれているかどうかを確認しようとしています。しかし、トークンに\ nまたは\ rがある場合、hasNext(String)
メソッドは何があってもfalseを返します。 (私はEclipseを使用しています)スキャナhasNext()メソッドとエスケープ文字
デフォルトの区切り文字(スペース)では問題は発生しません。しかし、useDelimiter()を使用すると、区切り文字を ""に設定する場合でも、hasNext(String)は常にfalseを返します。
Scanner
hasNext(String)
メソッドは、トークンのどこかにエスケープ文字があり、区切り文字もリセットされた場合、常にfalseを返しますか?
import java.util.*;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner("abcdefg\n\rX");
scanner.useDelimiter("X");
// Returns false!! Why?
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
scanner = new Scanner("abcde\n\rXfg");
scanner.useDelimiter("X");
// Returns false!! Why?
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
scanner = new Scanner("\n\rabcdeXfg");
scanner.useDelimiter("X");
// Returns false!! Why?
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
scanner = new Scanner("abcdeXfg\n\r");
scanner.useDelimiter("X");
// Returns true, as expected
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
scanner = new Scanner("abcdeXfg");
scanner.useDelimiter("X");
// Returns true, as expected
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
}
}
'(?s)'を正規表現に追加することは、確かにそのトリックです。私はまだ\ r \ nが問題を引き起こすべき理由を理解していない - それらは私がマッチさせようとしている文字ではありません。そして、なぜuseDelimiter()が問題に影響を与えるのかわかりません。 –
@MaeWarren 'useDelimiter(" X ")'を指定すると、最初のトークンは 'abcdefg \ n \ r'なので、' hasNext( "。* c。*") 'を呼び出すと、最初の'。* ''は 'ab'にマッチし、' c'は 'c'にマッチしますが、'。* 'は行終端文字にマッチすることができない限り、defg \ n \ r' *と一致しません。 – Andreas
私は参照してください。私はこれが完全に質問に答えると信じています。どうも。 –