プロが教えるわが家の防犯対策術!

JAVAのエラーが解決できません。

?,[,],(,)をreplaceAllを用いて置換したいと下記のようなプログラムを書いたのですが正常に動作しません。
また、Unicodeに置き換えても見たのですが、うまく動作しませんでした。
そして、排出されたエラーは下記の通りです。
文中にある、?などの記号を置換したいのですが何か良い方法は無いでしょうか?
何卒、ご教授、宜しくお願い致します。

テストコード>>>
class Test {
public static void main(String args[]) {
System.out.println(args[0].replaceAll("?", "置換?"));
System.out.println(args[0].replaceAll("[", "置換["));
System.out.println(args[0].replaceAll("(", "置換("));

}
}
エラー>>>
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0
?
^ at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at Test.main(Test.java:9)

A 回答 (3件)

とりあえず答えだけ書いてしまいますが


System.out.println(args[0].replaceAll("\\?", "置換?"));

と\\を書けばよいです。
ただしこれはお尋ねの場合だけの話であって
「正規表現」をちゃんと理解しておかないと使えません。

#1の方が言われるようにまずは「正規表現」とは何かを調べてください。
    • good
    • 2

正規表現で使う特別な意味を持つ文字を置き換え元に指定してあるためです。



特別な文字ではなく、普通の文字であることを指示するために、\を付ける必要があります。

ただし、¥は正規表現のエンジンに対して指定しなければいけないので、JAVAのコードでは\\となります。
    • good
    • 0

replaceAllの最初の引数に指定するのは正規表現のパターンです。


正規表現として適切にパース出来ない旨の例外が発生しているのではないでしょうか。
正規表現が何かわからないようでしたらまずそちらを調べてみましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!