4

正規表現を使用します

r="[^A-Za-z0-9]+"; 

文字列に文字と数字以外の文字が 1 つ以上含まれているかどうかを検出します。

次に、次のことを試しました。

Pattern.compile(r).matcher(p).find();

私はテストしました:

! @ # $ % ^ & * ( ) +  =- [ ] \ ' ; , . / { } | " : < > ? ~ _ `

ほとんどの場合、バックスプラッシュ \ とキャレット ^ 以外は機能します。

例えば

String p = "abcAsd10^"    (return false)
String p = "abcAsd10\\"   (return false) 

私が恋しいものはありますか?

4

7 に答える 7

2

次のコードをコンパイルして実行すると、「Found: true」が出力されます。

class T
{
    public static void main (String [] args)
    {
        String thePattern = "[^A-Za-z0-9]+"; 
        String theInput = "abskKel35^";
        boolean isFound = Pattern.compile(thePattern).matcher(theInput).find();
        System.out.println("Found: " + isFound);
    }
}

なぜ異なる結果が表示されるのかわかりません...

于 2012-06-05T18:51:42.883 に答える
1

このコードを自分のマシンで実行すると、trueと出力されます。

        String r="[^A-Za-z0-9]+"; 
        String p = "abcAsd10\\" ;
        Matcher m = Pattern.compile(r).matcher(p);
        System.out.println(m.find());

true

于 2012-06-05T18:53:50.207 に答える
1

そうではありませんか:

r="[^A-Za-z0-9]+"; 

あなたの質問では、a_z(アンダースコア)を書きます

于 2012-06-05T18:37:43.807 に答える
1

以下のみを変更することもできます。

[\w&&^_]+

どこ:

  • \wアンダースコア付きの単語文字:[a-zA-Z_0-9]
  • \W単語以外の文字:[^\w]

クラスでもっと見るPattern

于 2012-06-05T18:43:14.880 に答える
0

入力をマッチャーに引用してみてください。

Pattern.quote(p)
于 2012-06-05T18:50:07.723 に答える
0

すみません、持っていました

r="[^A-za-z0-9]+"; (with little "z", i.e. A-z). 

これにより、「false」が返されます。しかし、バックスプラッシュ \ とキャレット ^ 以外の他の特殊文字で機能するのはなぜですか?

于 2012-06-05T19:04:30.863 に答える
0

単に行う:

p.matches(".*\\W.*"); //return true if contains one or more special character
于 2012-06-05T19:09:14.073 に答える