0

繰り返し処理している演算子の文字列配列があります。に存在するものを見つけたらstrLine、その最初のインスタンスを空白文字列に置き換えます。に到達すると{、 が取得されjava.util.regex.PatternSyntaxException: Illegal repetitionます。

今、私{はそれが失敗している理由であるため、特別な Java 演算子であることを知っています。私が今持っている設定でこのキャラクターから逃れるための最良の方法は何ですか?

String[] operators = {".", ",", "{", "}", "!", "++", "--", "*", "/", "%", "+", "-", "<"}

String strLine = "for (int count = input.length(); count > 0; count--) {";
strLine = strLine.trim();

for (int i = 0; i < operators.length; i++) {
    if(strLine.contains(operators[i])) {

        strLine = strLine.replaceFirst(operators[i]+"\\s*", "");
        System.out.println("Removal of: " + operators[i]);
        System.out.println("Sentence after removal: " + strLine);
    }
}
4

2 に答える 2

1

java.util.regex.Pattern.quote を使用して特殊文字をエスケープできるはずです

変えることで

strLine = strLine.replaceFirst(operators[i]+"\\s*", "");

strLine = strLine.replaceFirst(Pattern.quote(operators[i])+"\\s*", "");
于 2012-12-06T04:58:48.120 に答える
0

各正規表現の予約済み演算子をバックスラッシュでエスケープする必要があります。したがって、2つのバックスラッシュを配置する必要があります(もう1つは、バックスラッシュ自体をエスケープすることです)。例: "\\。"、 "\\{"

于 2012-12-06T05:05:04.883 に答える