7
String s = "1.01";
Matcher matcher = Pattern.compile("[+-/\\*\\^\\%]").matcher(s);
if (matcher.find()) {
    System.out.println(matcher.group());
}

入力文字列は「1.01」、出力は「.」です。なぜ matcher.find() が true を返すのか理解できません。入力文字列に「+」、「-」、「*」、「^」、「%」などの記号がありません。なぜそれが起こったのですか?

4

2 に答える 2

6

私はあなたが逃げなければならないと確信しています--のような文字クラスで範囲記号として使用され[0-9]ます。ダッシュの-例を見つけたい場合は、エスケープする必要があります。

内部のシンボルを並べ替えると、エスケープなしでパターン全体を回避できます。 [-+*^%]動作するはずで、読みやすくなっています。

于 2013-05-29T17:54:34.200 に答える