文字列の置き換えを行う方法 (replaceAllで気をつけること)
Java の String クラスには置換メソッドとして replaceAll() メソッドが用意されています。
文字列に指定した文字列が存在した場合に、指定した別の文字列に置換を行います。
String str1 = "今日の天気は晴れです。"; String str2 = "晴れ"; String str3 = "雨"; str1.replaceAll(str2, str3);
replaceAll() は内部で正規表現を行い、置換処理を実現しています。
このため次の例はあっているように動作しますが、厳密には間違っています。
String str1 = "../test.html"; String str2 = "../"; String str3 = "http://www.example.com/"; str1.replaceAll(str2, str3);
置き換える対象の文字列が
String str1 = "http://www.example.com/test.html";
であった場合、正規表現の『 . (ドット)』は任意の1文字のため
http://www.example.chttp://www.example.com/test.html
と置き換えられます。
つまり正しくは次のようになります。
String str1 = "../test.html"; String str2 = "\\.\\./"; String str3 = "http://www.example.com/"; str1.replaceAll(str2, str3);
Javaで正規表現のエスケープを行うには Pattern.quote(str)を使用します。
import java.util.regex.Pattern;
String str1 = "../test.html";
String str2 = "../";
String str3 = "http://www.example.com/";
str1.replaceAll(Pattern.quote( str2 ), str3);
Pattern.quote は文字列中の正規表現記号それぞれをエスケープシーケンスでエスケープするのではなく、正規表現エスケープの開始記号¥Qと終了記号¥Eで囲うだけです。
つまり次のものと同義です。
str1.replaceAll("\\Q" + str2 + "\\E" , str3);
関連記事
- 文字列の部分一致検索を行う方法
- Java メモリー使用量を取得する方法
- 実行中のメソッド名やクラス名を取得する方法
- Singletonパターンを使ってクラスのインスタンスを1つにする(共有クラスのリソースを削減する方法)
- ファイルのテキストデータを読み込む
- テキストデータをファイルに書き込む BufferedWriterの使用例
- Webからダウンロードして保存する DefaultHttpClientの使用例
- ファイルをコピーする InputStream,OutputStreamの使用例
- 暗号化・複合化を行う ブロック暗号
- base64変換の一覧とその詳細サンプルコード
- 型変換の一覧(キャスト)
- 処理を一定時間停止させる方法
- ファイルの拡張子を取得する
- Java
- サンプルコード
- Androidアプリ
- Java JDK6のインストール
- assetsフォルダには1MB以上の非圧縮ファイルを設置できない
- Javaをコマンドラインから実行する
- Android Maps API Keyを取得する方法 Google Mapsを利用する
- 変数のデータ型
- cronを実行すると『TERM environment variable not set.』というエラーメールが飛ぶ
- EclipseのビューをカスタマイズしてファイルエクスプローラやLogCatを表示する
- apkファイルをサーバから端末にダウンロードする
- layoutのbackgroundで透過(transparent)を指定する方法
- SDカードに保存したファイルをギャラリーなどに反映させる方法
- xmlファイルの開始タグと閉じタグは大文字小文字も同じにする
- WebViewを使ってWebサイトを表示する方法 WebKitからアプリ、アプリからWebKitへの連携処理
- Mobile Network Code(MNC)の一覧[C-D]
- cronのメール送信先を指定する方法(cronごとに送信先のメールアドレスを指定する方法)
- facebook APIを使用する時にfacebook Appsでアプリを登録するまでの流れ
- 画像を解像度ごとに振り分ける方法 国際化する方法(drawable、layout、valuesなどの修飾句)
- res/xmlフォルダの1MB以上のxmlファイルは読み込めない
スポンサーリンク