文字列の置き換えを行う方法 (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アプリ
- Mobile Network Code(MNC)の一覧[H-I]
- EditTextのソフトキーボードの『完了』を虫メガネアイコンなどに変更する方法
- cron実行時に『/bin/sh: 〜〜: command not found』と出てcronが実行されない場合
- TextViewに独自フォントを使用する方法
- Mobile Network Code(MNC)の一覧[C-D]
- WebViewで横の隙間を消す方法(スクロールバー領域を消す)
- 動画を再生する方法 MediaPlayer
- WebViewの設定一覧
- リソースファイルの設置場所と利用方法
- Excelの日付が数字になるときの対処法
- Androidアプリの開発環境を作る方法
- Java JDK6のインストール
- apkファイルをAndroid端末にUSB接続でインストールする方法 (開発者ではない人向け)
- Colorクラスでの色指定
- Mobile Network Code(MNC)の一覧[J-L]
- タイトルバーやステータスバーを非表示にする方法
- Mobile Network Code(MNC)の一覧[T-U]
スポンサーリンク