Javaで文字列をサクッと検索&置換!

docs

前の記事では、Javaでの基本的な文字列操作について解説しましたね。今回は、さらに一歩踏み込んで「特定の文字列を見つけたり、別の文字列に置き換えたりする方法」について、具体例を交えながら見ていきましょう。日常のプログラミングで本当によく使うテクニックなので、しっかりマスターしてくださいね!


1. 文字列の中にアレがあるか探す(検索)

「この長い文章の中に、あの単語が含まれているかな?」そんな時に使うのが、文字列の検索です。Javaにはいくつかの便利なメソッドがあるので、順番に見ていきましょう。

contains() メソッド:あるかないかだけ知りたい!

一番シンプルに「あるかないか」だけを知りたいなら、contains()メソッドが便利です。指定した文字列が含まれていればtrue、含まれていなければfalseを返します。

Java

public class StringSearchExample {
    public static void main(String[] args) {
        String text = "Javaプログラミングは楽しい!";

        // "Java" が含まれているか?
        boolean result1 = text.contains("Java");
        System.out.println("Javaが含まれているか?: " + result1); // true

        // "Python" が含まれているか?
        boolean result2 = text.contains("Python");
        System.out.println("Pythonが含まれているか?: " + result2); // false

        // 大文字・小文字は区別されるので注意!
        boolean result3 = text.contains("java");
        System.out.println("javaが含まれているか?: " + result3); // false
    }
}

paizaで実行した結果

indexOf() メソッド:どこにあるか教えて!

「あるかないか」だけでなく、「どこにあるか」も知りたい場合は、indexOf()メソッドを使います。指定した文字列が最初に出てくる場所の**インデックス(文字の位置)**を返してくれます。もし見つからなかった場合は -1 を返します。

インデックスは、文字列の先頭を 0 と数えることを覚えておいてくださいね!

Java

public class IndexOfExample {
    public static void main(String[] args) {
        String sentence = "今日は良い天気で、Javaの勉強日和!";

        // "Java" がどこにあるか?
        int index1 = sentence.indexOf("Java");
        System.out.println("Javaの開始位置: " + index1); // 9

        // "天気" がどこにあるか?
        int index2 = sentence.indexOf("天気");
        System.out.println("天気の開始位置: " + index2); // 5

        // "Ruby" は見つからない
        int index3 = sentence.indexOf("Ruby");
        System.out.println("Rubyの開始位置: " + index3); // -1

        // 複数ある場合は最初の位置
        String multiText = "AppleとOrangeとApple";
        int index4 = multiText.indexOf("Apple");
        System.out.println("最初のAppleの開始位置: " + index4); // 0

        // 特定の位置から探し始めることもできる!
        int index5 = multiText.indexOf("Apple", 1); // インデックス1以降から探す
        System.out.println("2番目のAppleの開始位置 (インデックス1以降): " + index5); // 13
    }
}

paizaで実行した結果

startsWith() / endsWith() メソッド:これで始まる?これで終わる?

文字列が特定の文字で始まるか、または終わるかを確認したいときに使います。

Java

public class StartEndExample {
    public static void main(String[] args) {
        String fileName = "report_2025_final.pdf";

        // ".pdf" で終わるか?
        boolean isPdf = fileName.endsWith(".pdf");
        System.out.println("PDFファイルか?: " + isPdf); // true

        // "report" で始まるか?
        boolean startsWithReport = fileName.startsWith("report");
        System.out.println("reportで始まるか?: " + startsWithReport); // true

        // "Report" で始まるか?(大文字小文字を区別)
        boolean startsWithCapitalReport = fileName.startsWith("Report");
        System.out.println("Reportで始まるか?: " + startsWithCapitalReport); // false
    }
}

paizaで実行した結果

2. 文字列をゴッソリ入れ替える(置換)

次に、文字列の一部を別の文字列に置き換える方法です。例えば、WebサイトのURLをまとめて変更したり、特定の単語を修正したりする時に役立ちます。

replace() メソッド:特定の文字や文字列を置き換える!

replace()メソッドを使うと、指定した文字(char型)や文字列(String型)を、別の文字や文字列に置き換えることができます。

  • replace(char oldChar, char newChar): 1文字を別の1文字に置き換える
  • replace(CharSequence target, CharSequence replacement): 文字列を別の文字列に置き換える(CharSequenceStringも含む親玉みたいなものと思ってOK!)

Java

public class StringReplaceExample {
    public static void main(String[] args) {
        String originalText = "今日の天気は晴れ。明日の天気も晴れ。";

        // '晴' を '曇' に置き換える
        String newText1 = originalText.replace('晴', '曇');
        System.out.println("文字置換後: " + newText1); // 今日の天気は曇れ。明日の天気も曇れ。

        // "天気" を "予報" に置き換える
        String newText2 = originalText.replace("天気", "予報");
        System.out.println("文字列置換後: " + newText2); // 今日の予報は晴れ。明日の予報も晴れ。

        // 存在しないものを置き換えようとしても何も変わらない
        String newText3 = originalText.replace("雨", "雪");
        System.out.println("存在しないもの: " + newText3); // 今日の天気は晴れ。明日の天気も晴れ。
    }
}

注意点: replace()メソッドは、マッチするすべての箇所を置き換えます。もし最初の1箇所だけを置き換えたい場合は、次の正規表現を使う方法を見てください。

paizaで実行した結果

replaceAll() / replaceFirst() メソッド:正規表現で強力に置換!

replaceAll()replaceFirst()は、正規表現というちょっと特別なパターンを使って文字列を検索・置換する際に使います。正規表現は最初は難しく感じるかもしれませんが、文字列のパターンマッチングには非常に強力なツールです。

  • replaceAll(String regex, String replacement): 指定した正規表現にマッチするすべての箇所を置き換える
  • replaceFirst(String regex, String replacement): 指定した正規表現にマッチする最初の1箇所だけを置き換える

ここでは正規表現の詳細には立ち入りませんが、簡単な例でそのパワーを体験してみましょう。

Java

public class RegexReplaceExample {
    public static void main(String[] args) {
        String data = "メールアドレスは user@example.com と admin@example.org です。";

        // 全ての "@example.com" を "@newdomain.co.jp" に置き換える
        String newData1 = data.replaceAll("@example\\.com", "@newdomain.co.jp"); // ドットは正規表現で特別な意味を持つのでバックスラッシュでエスケープ
        System.out.println("全置換後: " + newData1);
        // 出力: メールアドレスは user@newdomain.co.jp と admin@example.org です。

        String productList = "商品A:123円, 商品B:456円, 商品C:789円";

        // 数字(\\d+)と「円」を「円(税込)」に置き換える
        String newProductList = productList.replaceAll("(\\d+)円", "$1円(税込)"); // $1は正規表現でマッチしたグループ(ここでは数字)を指す
        System.out.println("税込価格表示: " + newProductList);
        // 出力: 商品A:123円(税込), 商品B:456円(税込), 商品C:789円(税込)

        String logMessage = "ERROR: ファイルが見つかりません。ERROR: アクセス権がありません。";

        // 最初の "ERROR" だけを "警告" に置き換える
        String newLogMessage = logMessage.replaceFirst("ERROR", "警告");
        System.out.println("最初だけ置換: " + newLogMessage);
        // 出力: 警告: ファイルが見つかりません。ERROR: アクセス権がありません。
    }
}

正規表現は奥が深いので、今は「こんなこともできるんだ!」くらいに覚えておいてくださいね。もっと深く知りたい場合は、正規表現について学んでみるといいかもしれません。

paizaで実行した結果


まとめ

今回はJavaで文字列を検索したり、置換したりする方法を学びました。

  • contains(): 特定の文字列があるかないかを確認したいときに。
  • indexOf(): 特定の文字列がどこにあるか知りたいときに。
  • startsWith() / endsWith(): 文字列の始まりや終わりを確認したいときに。
  • replace(): 特定の文字や文字列をすべて置き換えたいときに。
  • replaceAll() / replaceFirst(): 正規表現を使って強力に置換したいときに。

これらのメソッドは、ログファイルの解析、データの整形、Webサイトのコンテンツ修正など、様々な場面で活躍します。ぜひ色々なコードを書いて試してみてくださいね!

コメント

タイトルとURLをコピーしました