2

4 つの大文字からなるPattern一致する aを書いています。String

例えば:

  • 「ああああ」
  • "あいうえお"
  • 「ZZZZ」

... はすべて正しい一致ですが、次のようになります。

  • 「1DFG」
  • "!@#$"
  • 「1234」

...一致しないはずです。

以下の私のコードを見つけてください。

false「AAAA」で返し続けます。

誰でもこれに光を当てることができますか?

public static boolean checkSettings(String str) {
    Pattern p = Pattern.compile("\\p{Upper}{4}");
    Matcher m = p.matcher("%str".format(str));
    if (m.matches()) {
        return true;
    } else {
        // System.exit(1)
        return false;
    }
}
4

3 に答える 3

5

あなたの入力に問題はないと思います。Patternおそらく入力に何か問題がありますString

次の例を見てください。

Pattern p = Pattern.compile("\\p{Upper}{4}");
Matcher m = p.matcher("%str".format("AAAA"));
System.out.println(m.find());

出力:

true

警告

\\p{Upper}{4}\\P{Upper}{4}は同じではなくPattern、互いに反対です。

2 番目のインスタンスは、4 つの大文字を否定します (大文字の "P" を参照)。あなたの質問のタイトルが間違っていることを示しているので、私はこれを指摘していますPattern

最後の注意事項

に ASCII アルファベット文字のみを使用する予定の場合は、このスレッドの他の人が言及しているように、(ここでは大文字が重要です)Patternを使用することをお勧めします。[A-Z]とまったく同じです\\p{Upper}

大文字のUnicode カテゴリ\\p{Lu}に一致する とは若干の違いがあります。

于 2013-09-26T08:50:45.890 に答える
0

実際に を渡すと、コードは正しい結果を返すはずですAAAA。ただし、コードを次のように書き直す必要があります。

public static boolean checkSettings(String str) {
    Pattern p = Pattern.compile("\\p{Upper}{4}");
    Matcher m = p.matcher(String.format(str));
    return m.matches();
}

あるいは

public static boolean checkSettings(String str) {
    return str.matches("\\p{Upper}{4}");
}

これらのサンプルは、コードとほぼ同等です。私はちょうどそれをテストしました、それはtrueを返しますAAAA

于 2013-09-26T09:05:11.487 に答える
0

パターンを次のように変更します。

Pattern p = Pattern.compile("[A-Z]{4}");

マッチャーを次のように変更します。

Matcher m = p.matcher(str);
于 2013-09-26T08:48:11.787 に答える