【プログラミングしてみよう20】JavaのStringメソッドで文字列を自在に操る

Java

前回はデザインパターン入門としてSingletonとFactoryを学びました。

今回は、プログラムのあらゆる場面で登場する「文字列操作」をテーマに、Javaの String クラスでよく使うメソッドをまとめて解説します。 これまでも equals()startsWith() などを使ってきましたが、今回はさらに多くのメソッドを体系的に整理します。

Stringクラスの基本

Javaの文字列は String クラスのインスタンスとして扱われます。文字列の比較に == ではなく equals() を使う理由もここにあります。== はインスタンスが同じかどうかを比較するのに対し、equals() は文字列の内容が同じかどうかを比較します。

String a = "hello";
String b = "hello";
System.out.println(a == b);       // true になることもあるが保証されない
System.out.println(a.equals(b));  // 常に true

また、String は一度作ると中身を変更できない「イミュータブル(不変)」なオブジェクトです。文字列を連結するたびに新しいオブジェクトが作られるため、大量の連結処理には StringBuilder を使う方が効率的です。

サンプルコード(よく使うStringメソッド)

ファイル作成

「Java09」フォルダに StringTest.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

public class StringTest {
    public static void main(String[] args) {
        String str = "  Hello, Java World!  ";

        // 長さを取得
        System.out.println("length: " + str.length());

        // 前後の空白を削除
        String trimmed = str.trim();
        System.out.println("trim: \"" + trimmed + "\"");

        // 大文字・小文字に変換
        System.out.println("toUpperCase: " + trimmed.toUpperCase());
        System.out.println("toLowerCase: " + trimmed.toLowerCase());

        // 特定の文字列が含まれるか
        System.out.println("contains \"Java\": " + trimmed.contains("Java"));

        // 文字列の置換
        String replaced = trimmed.replace("Java", "Kotlin");
        System.out.println("replace: " + replaced);

        // 文字列の分割
        String csv = "ぱんまる,たろう,はなこ";
        String[] names = csv.split(",");
        for (String name : names) {
            System.out.println("split: " + name);
        }

        // 部分文字列の取得
        System.out.println("substring(7, 11): " + trimmed.substring(7, 11));

        // 特定の文字列の位置を取得
        System.out.println("indexOf \"World\": " + trimmed.indexOf("World"));

        // 文字列の先頭・末尾チェック
        System.out.println("startsWith \"Hello\": " + trimmed.startsWith("Hello"));
        System.out.println("endsWith \"!\": " + trimmed.endsWith("!"));

        // 数値を文字列に変換
        int num = 42;
        String numStr = String.valueOf(num);
        System.out.println("valueOf: " + numStr + " (型: String)");

        // 文字列を数値に変換
        String numStr2 = "100";
        int parsed = Integer.parseInt(numStr2);
        System.out.println("parseInt: " + parsed + " (型: int)");

        // StringBuilder で効率よく連結
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= 5; i++) {
            sb.append(i);
            if (i < 5) sb.append("-");
        }
        System.out.println("StringBuilder: " + sb.toString());
    }
}

コンパイル

javac StringTest.java

実行

java StringTest

実行結果は次のようになります。

length: 22
trim: "Hello, Java World!"
toUpperCase: HELLO, JAVA WORLD!
toLowerCase: hello, java world!
contains "Java": true
replace: Hello, Kotlin World!
split: ぱんまる
split: たろう
split: はなこ
substring(7, 11): Java
indexOf "World": 12
startsWith "Hello": true
endsWith "!": true
valueOf: 42 (型: String)
parseInt: 100 (型: int)
StringBuilder: 1-2-3-4-5

コードの解説

length() は文字列の文字数を返します。スペースも1文字としてカウントされるため、" Hello, Java World! " は22文字になっています。

trim() は文字列の前後にある空白(スペース・タブ・改行)を取り除きます。ユーザーの入力を受け取るときに、うっかり入ったスペースを除去するのに便利です。

toUpperCase()toLowerCase() は文字列をすべて大文字・小文字に変換します。大文字・小文字を無視して比較したい場合は equalsIgnoreCase() も使えます。

contains() は指定した文字列が含まれているかを true/false で返します。startsWith()endsWith() は先頭・末尾が指定した文字列かどうかを確認します。

replace() は指定した文字列を別の文字列に置き換えます。元の文字列は変更されず、置き換えた新しい文字列が返ってくる点に注意しましょう。

split() は指定した区切り文字で文字列を分割し、配列として返します。CSVのようなカンマ区切りのデータを扱うときによく使います。

substring(7, 11) はインデックス7から11の直前(10)までの文字列を取り出します。インデックスは0始まりで、終端のインデックスの文字は含まれない点に注意してください。

indexOf() は指定した文字列が最初に登場する位置(インデックス)を返します。見つからない場合は -1 が返ります。

String.valueOf() は数値などを文字列に変換するメソッドです。逆に文字列を整数に変換するには Integer.parseInt() を使います。これはToDoアプリでも登場しました。

StringBuilder は文字列を効率よく連結するためのクラスです。append() で文字列を追加していき、最後に toString()String に変換します。ループの中で + を使って文字列を連結し続けると、そのたびに新しい String オブジェクトが作られてメモリの無駄遣いになるため、大量の連結には StringBuilder を使うのがベストプラクティスです。

まとめ

String クラスには文字列を操作するための便利なメソッドが多数用意されています。trim()replace()split()substring() など、よく使うものを覚えておくと、文字列を扱う処理がぐっと書きやすくなります。また、String はイミュータブルであることと、大量の連結には StringBuilder を使うべきことも重要なポイントです。文字列操作はどんなプログラムでも必ず登場するので、今回のサンプルをベースにいろいろ試してみてください。

2026/06/29(月) ぱんまる

コメント

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