導入:なぜString.replaceAllを学ぶのか
Javaで文字列を操作する際、単純な置換(replace)では対応できないケースが多々あります。「特定のパターンに一致するものを全て変えたい」「数字だけを抜き出したい」といった複雑な要望を叶えてくれるのがString.replaceAllです。このメソッドは正規表現を扱うため、習得すればコードの行数を大幅に減らし、柔軟なデータ処理が可能になります。
基礎知識:正規表現とは?
正規表現(Regular Expression)とは、文字列のパターンを定義するための特別な記法です。
・メタ文字:特定の意味を持つ記号。例えば「\d」は「0〜9の数字」を意味します。
・PatternとMatcher:Javaでは正規表現を扱うためにjava.util.regexパッケージのクラスを使用しますが、String.replaceAllは内部でこれらを自動的に呼び出してくれるため、手軽に正規表現を使えるようになっています。
実装:replaceAllの使い方
基本構文は `文字列.replaceAll(“正規表現”, “置換後の文字列”)` です。
ここで重要なのが「第一引数は正規表現である」という点です。例えば、ドット(.)は正規表現で「任意の1文字」を指すため、単にピリオドを置換したいだけの場合でもエスケープ(\\.)が必要です。
サンプルプログラム:実用的な文字列変換
以下のコードは、電話番号のハイフンを除去したり、特定の形式を変換する例です。コピーして動作を確認してみてください。
public class ReplaceExample {
public static void main(String[] args) {
// 例1:ハイフンを全て削除する
String phone = "090-1234-5678";
String cleanPhone = phone.replaceAll("-", "");
System.out.println("ハイフン除去: " + cleanPhone);
// 例2:数字以外を全て削除する(\dは数字、\Dは数字以外)
String text = "価格: 1,200円";
String onlyNumber = text.replaceAll("\\D", "");
System.out.println("数字のみ抽出: " + onlyNumber);
// 例3:名前付きグループの活用(年月日の形式を入れ替える)
// (?
String date = "2023-10-25";
String formattedDate = date.replaceAll("(?
System.out.println("日付変換: " + formattedDate);
}
}
応用・注意点:現場で陥りやすい罠
1. パフォーマンスの考慮:replaceAllをループ内で何度も呼び出すと、内部で毎回正規表現がコンパイルされるため負荷がかかります。大量のデータを処理する場合は、事前にPattern.compileを使用してコンパイル済みのオブジェクトを使い回しましょう。
2. 特殊文字のエスケープ:先述の通り、ドット(.)やプラス(+)などは正規表現の制御文字です。意図通りに動かない場合は、エスケープ漏れを疑ってください。
3. replaceAll vs replace:単純な文字列置換であれば、正規表現エンジンを介さないString.replaceの方が高速で安全です。正規表現が必要な時だけreplaceAllを使うのが、シニアエンジニアの流儀です。
正規表現は最初は難しく感じるかもしれませんが、一度慣れると非常に強力な武器になります。まずは小さな置換から試してみてくださいね。

コメント