2

単純なことはわかっていますが、なぜうまくいかないのかわかりません。

スキャナーの次の文字列がパターンと一致するかどうかを確認しようとします: 文字列は次で始まる必要があります

" DESCRIPTION". だから、私は試します:

Scanner sc = new Scanner("   DESCRIPTION = 'Header for scroller'");
System.out.println("Has Next = " + sc.hasNext("\\s+DESCRIPTION.*"));

しかし、うまくいきません。なぜですか?より単純な正規表現は問題なく動作します:

 Scanner sc = new Scanner("   DESCRIPTION = 'Заголовки таблиц скроллеров'");
 System.out.println("Has Next = " + sc.hasNext(".*DESCRIPTION.*"));
4

5 に答える 5

2

sc.hasNext(pattern)true次のトークンが一致する場合に返しますpattern

次のトークンは です"DESCRIPTION"

  • "DESCRIPTION" マッチ .*DESCRIPTION.*
  • "DESCRIPTION" 一致しません \s+DESCRIPTION.*(トークンの前にスペースがないため)

これを試すことができます:

Scanner sc = new Scanner("   DESCRIPTION = 'Header for scroller'");
System.out.println("Has Next = " + sc.hasNext("DESCRIPTION.*"));
次あり = true
于 2013-07-23T14:59:51.170 に答える
1

の JavaDoc からScanner#hasNext(String pattern)

次のトークンが、指定された文字列から構築されたパターンと一致する場合にtrue を返します

そう

sc.hasNext("\\s+DESCRIPTION.*")

DESCRIPTION次のトークンが(空白なしで) であるため、false を返します。

sc.hasNext(".*DESCRIPTION.*")

.*の前後の両方の文字が 0 に一致するため、 true を返しますDESCRIPTION

于 2013-07-23T15:00:44.273 に答える
0

お探しのものではないかもしれませんが、

Scanner sc = new Scanner("   DESCRIPTION = 'Header for scroller'".trim());
System.out.println("Has Next = " + sc.hasNext("^DESCRIPTION.*"));

私のためにトリックをしました...

于 2013-07-23T15:02:29.403 に答える
0

Scanner はデフォルトの区切り文字として空白を使用するため、これは機能しません。したがって、hasNext は \s+DESCRIPTION を見つけることができず、.*DESCRIPTION.* または単に DESCRIPTION.* を見つけます。コードを次のように変更した場合

Scanner sc = new Scanner("   DESCRIPTION = 'Header for scroller'");
sc.useDelimiter( "_" );
System.out.println("Has Next = " + sc.hasNext("\\s+DESCRIPTION.*"));

その後、あなたは結果を期待していたでしょう。

于 2013-07-23T15:17:59.830 に答える