- - PR -
正規表現
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-17 14:24
こんにちは。
初歩的な質問だと思うのですが、ちょっと行き詰ってしまったので 質問させていただきます。 「?(半角ハテナ)」を含んでいる文字列の中の「?」を 別な文字に置き換えようとしています。 String#replaceAllメソッドを使用したいのですが、 正規表現としての「?」として認識されてしまい、 うまく置換する事ができません。 例: String str = "abcdef?"; System.Out.Println(str.replaceAll("?" , "hoge"); このようにするとPatternSyntaxExceptionが発生します。 APIドキュメントのPatternクラスを参照して、 str.replaceAll("\\p{?}" , "hoge"); とすると、エスケープシーケンスが無効です、と コンパイルエラーが発生します。 おそらく簡単な所でつまづいていると思うのですが、 どなたかアドバイスいただければ幸いです。 それでは。 | ||||||||
|
投稿日時: 2004-11-17 14:39
System.Out.Println(str.replaceAll("\\?" , "hoge");
でどうですか。 | ||||||||
|
投稿日時: 2004-11-17 14:40
?をエスケープして"\?"で良いんじゃないですか。 str.replaceAll("\\?" , "hoge"); または"?"はコードで表すと0x3Fなので str.replaceAll("\\x3f" , "hoge"); か str.replaceAll("\\u003f" , "hoge"); で良いんじゃないでしょうか。 \p{...}はまるっきり関係ないです。 | ||||||||
|
投稿日時: 2004-11-17 14:58
これはどうですか?
--------------- public static String rplc(String str, String n1, String n2) { int itmp = 0; if (str==null) return ""; String tmp = str; StringBuffer sb = new StringBuffer(); sb.append(""); while (tmp.indexOf(n1)>-1) { itmp = tmp.indexOf(n1); sb.append(tmp.substring(0,itmp)); sb.append(n2); tmp = tmp.substring(itmp+n1.length()); } sb.append(tmp); return sb.toString(); } --------------- 使い方は String str = rplc( str, "?", "hoge" ); J2SDK1.4以下のシステムであればreplaceAll代わりによいです。 速度もreplaceAllより早いと思うんですが・・ | ||||||||
|
投稿日時: 2004-11-17 15:25
お疲れさまです。 \をjavaの文字として認識するためにエスケープする必要があるので、 正規表現のエスケープとあわせて二つ必要です。 また、replaceAllは戻り値がStringです。 なので、下記のコードで上手くいくと思います。 String str = "abcdef?"; str = str.replaceAll("\\?","test"); System.out.println(str); | ||||||||
|
投稿日時: 2004-11-17 15:43
皆さん回答ありがとうございました。
str.replaceAll("\\?", "hoge"); で置換することができました。 また、影フリーさんの置換メソッドも便利そうなので、 使わせていただきます。 有難うございました。 | ||||||||
|
投稿日時: 2004-11-17 16:00
速度重視ならindexOfの呼出回数を減らすとなお良いです。速度的には微々たる差ですが。
関係ないですが、strがnullの時,空文字返すのは違和感があります…。 | ||||||||
|
投稿日時: 2006-10-06 10:41
普通に置換
|
1