Java道|Stringクラスで広がる文字列処理

文字列をただ表示するだけで終わらせない。
Stringクラスを使いこなせば、入力チェック、検索、切り出し、変換まで自在に扱える。

Stringクラスで広がる文字列処理

Javaでプログラムを書いていると、数値だけでなく、名前、メッセージ、商品名、メールアドレス、住所、コマンド入力など、文字の並びを扱う場面がたくさん出てきます。

この文字の並びを、Javaでは文字列として扱います。
そして、文字列を便利に扱うために用意されているのが String クラスです。

鬼滅の刃でたとえると、String クラスは「文字の巻物」を扱うための道具箱のようなものです。

巻物に書かれた任務名の長さを調べる。
先頭の文字を確認する。
必要な部分だけ切り出す。
特定の言葉で始まるか調べる。
英字を大文字や小文字にそろえる。
合言葉が正しいか確認する。

こうした文字列の処理を、String クラスのメソッドを使って行えます。

これまでにも、System.out.println で文字を表示したり、String 型の変数に名前やメッセージを入れたりしてきました。
ただ、String クラスには、単に文字列を入れておくだけではなく、文字列を調べる、比べる、切り出す、変換するための便利な機能がたくさん用意されています。

この String クラスを使えるようになると、Javaプログラムはぐっと実用的になります。

Stringクラスとは何か

String クラスは、文字列を扱うために用意されたクラスです。

Javaでは、文字の並びをただの記号の集まりとして扱うのではなく、String クラスによって表されるデータとして扱います。

たとえば、次のような文字列があります。

文字列の例内容
こんにちはあいさつの文字列
Java学習中学習状態を表す文字列
水月隊士の名前
user@example.comメールアドレス風の文字列

鬼滅の刃でたとえると、これらは任務の巻物に書かれた文字です。
String クラスは、その巻物の文字を調べたり、必要な部分を取り出したりするための仕組みです。

考え方鬼滅の刃でたとえると
String クラス文字の巻物を扱うための設計図
実際の文字列巻物に書かれた任務名、隊士名、合言葉
String メソッド巻物の文字を調べる技

つまり、String クラスは「文字列を扱うための設計図」であり、実際の文字列はその仕組みを使って扱われるデータです。

文字列はこれまでにも何度も使ってきた

String クラスは、Java学習のかなり早い段階から登場しています。

たとえば、次のような場面です。

場面
画面にメッセージを表示するSystem.out.println("こんにちは");
名前を変数に入れるString name = "水月";
入力された言葉を扱うString message = scanner.nextLine();
条件判断で文字を比べるanswer.equals("はい")

このように、String クラスは特別な場面だけで使うものではありません。

Javaプログラムの中で、文字を扱うなら何度も登場する基本クラスです。

鬼滅の刃でたとえると、任務中に巻物、伝令文、合言葉、隊士名、地名などを何度も読むようなものです。
文字列を扱う力は、プログラム全体の実用性に直結します。

Stringクラスでできること

String クラスには、文字列を扱うためのメソッドがたくさん用意されています。

代表的なものを整理すると、次のようになります。

メソッドできること鬼滅の刃でたとえると
charAt指定した位置の文字を取り出す巻物の指定位置の文字を読む
endsWith指定した文字列で終わるか調べる任務名の末尾を確認する
equals同じ文字列か調べる合言葉が完全一致するか確認する
equalsIgnoreCase大文字小文字を無視して比較する英字の合言葉をゆるく確認する
indexOf指定文字が最初に現れる位置を調べる巻物の中で最初に出る言葉を探す
lastIndexOf指定文字が最後に現れる位置を調べる巻物の中で最後に出る言葉を探す
length文字数を調べる巻物の文字数を数える
substring一部分だけ切り出す巻物の必要な部分だけ抜き出す
startsWith指定した文字列で始まるか調べる任務名の始まりを確認する
toLowerCase小文字に変換する英字を小文字にそろえる
toUpperCase大文字に変換する英字を大文字にそろえる

String クラスは、文字列を保存するだけのクラスではありません。

文字列を調べる。
文字列を比べる。
文字列の一部を取り出す。
文字の形をそろえる。

こうした実用的な処理をまとめて持っているクラスです。

シンプルな例でStringメソッドを見る

まずは、文字列の長さを調べ、先頭の文字を取り出し、一部分を切り出す例を見てみましょう。

class Main {
    public static void main(String[] args) {
        // 文字列を用意する
        String message = "おはようございます";

        // 文字数を表示する
        System.out.println("文字数は" + message.length() + "文字です。");

        // 先頭の文字を表示する
        System.out.println("先頭の文字は" + message.charAt(0) + "です。");

        // 一部分を取り出して表示する
        System.out.println("途中から取り出すと「" + message.substring(4) + "」になります。");
    }
}

このプログラムでは、message という String 型の変数に、おはようございます という文字列を入れています。

その message に対して、String クラスのメソッドを呼び出しています。

コード意味
message.length()文字数を調べる
message.charAt(0)先頭の1文字を取り出す
message.substring(4)4番目の位置から最後まで取り出す

鬼滅の刃でたとえると、message は任務の巻物です。
length() は巻物の文字数を数える技です。
charAt(0) は先頭の文字を読む技です。
substring(4) は途中から後ろの文だけを切り出す技です。

文字の位置は0から始まる

String クラスを使うときに、とても大切なのが文字の位置の数え方です。

Javaでは、文字列の先頭を 0 として数えます。

たとえば、Java という文字列を位置つきで見ると、次のようになります。

位置文字
0J
1a
2v
3a

そのため、charAt(0) は J を取り出します。
charAt(2) は v を取り出します。

初心者のうちは、1文字目だから 1 を指定したくなることがあります。
でも、Javaでは最初が 0 です。

鬼滅の刃でたとえると、巻物の文字に番号を振るとき、最初の文字を第0番として数える特別な隊内ルールがあるようなものです。

この 0 から始まる感覚は、配列やリストでもよく出てくるので、しっかり慣れておくと後の学習にもつながります。

lengthで文字数を調べる

文字列の長さを知りたいときは length() を使います。

class Main {
    public static void main(String[] args) {
        String city = "福岡市";
        System.out.println(city.length());
    }
}

このコードでは、福岡市 という文字列の長さを調べています。

福岡市 は3文字なので、表示される値は 3 です。

文字列length() の結果
福岡市3
Java4
水月2

length() は、文字列に何文字入っているかを int 型の値として返します。

この処理は、入力チェックでもよく使います。

使い道
名前の確認名前が空欄ではないか調べる
パスワードの確認文字数が短すぎないか調べる
メッセージの確認入力文字数が制限内か調べる

鬼滅の刃でたとえると、任務報告の巻物が短すぎないか、長すぎないかを確認するようなものです。

charAtで指定した位置の文字を取り出す

文字列の中から、特定の1文字を取り出したいときは charAt() を使います。

class Main {
    public static void main(String[] args) {
        String word = "さくら";
        System.out.println(word.charAt(1));
    }
}

この場合、表示されるのは く です。

理由は、文字の位置が 0 から始まるからです。

位置文字
0
1
2

そのため、charAt(1) は く を取り出します。

charAt() は、文字列の中を1文字ずつ確認したいときにも便利です。

使い道
先頭文字の確認商品コードの先頭を調べる
指定位置の確認3文字目が特定の文字か調べる
文字列の走査1文字ずつ処理する

鬼滅の刃でたとえると、巻物の何番目にどの印が書かれているかを確認するような処理です。

substringで一部分を切り出す

文字列の一部だけを取り出したいときは substring() を使います。

substring() には、主に2つの形があります。

引数が1つの形

class Main {
    public static void main(String[] args) {
        String text = "今日の天気は晴れです";
        System.out.println(text.substring(3));
    }
}

この場合、3番目の位置から最後までを取り出します。

書き方意味
substring(3)3番目の位置から最後まで

引数が2つの形

class Main {
    public static void main(String[] args) {
        String text = "今日の天気は晴れです";
        System.out.println(text.substring(3, 6));
    }
}

この場合、3番目の位置から、6番目の位置の手前までを取り出します。

ここで大切なのは、終了位置そのものは含まれないことです。

書き方意味
substring(開始位置)開始位置から最後まで
substring(開始位置, 終了位置)開始位置から終了位置の手前まで

鬼滅の刃でたとえると、巻物の一部だけを切り出して、必要な任務情報だけを別紙に写すようなものです。

substring() は、かなり実用的です。

使い道
郵便番号の一部を取り出す先頭3桁だけ見る
日付文字列から年を取り出す2026-05-04 から 2026 を取る
長い文章の先頭だけ表示するプレビュー表示を作る

equalsで文字列を正しく比較する

文字列が同じ内容かどうかを調べるときは equals() を使います。

class Main {
    public static void main(String[] args) {
        String answer = "はい";

        if (answer.equals("はい")) {
            System.out.println("確認できました。");
        }
    }
}

このコードでは、answer の内容が はい と同じかどうかを調べています。

ここで大切なのは、文字列の内容比較では equals() を使うことです。

数値の比較では == を使うことがあります。
しかし、文字列の内容を比べたい場合は equals() が基本です。

比較したいもの基本の考え方
数値== を使うことが多い
文字列の内容equals() を使う

鬼滅の刃でたとえると、合言葉が正しいか確認する場面です。

合言葉の見た目が同じかどうかを確認したいので、equals() を使って内容を比べます。

equalsIgnoreCaseで大文字小文字を気にせず比較する

英単語を扱うときには、大文字と小文字の違いを気にせず比較したいことがあります。

そのようなときは equalsIgnoreCase() を使います。

class Main {
    public static void main(String[] args) {
        String code = "java";

        if (code.equalsIgnoreCase("JAVA")) {
            System.out.println("同じ言葉として扱います。");
        }
    }
}

この場合、java と JAVA は、大文字小文字が違っていても同じ言葉として判定されます。

比較equals()equalsIgnoreCase()
java と JAVAfalsetrue
Java と Javatruetrue

鬼滅の刃でたとえると、英字の合言葉を確認するとき、隊士によって大文字や小文字の書き方が少し違っていても、同じ合言葉として扱いたい場面です。

ログイン名やコマンド入力などで、大文字小文字の違いを無視したい場合に便利です。

startsWithとendsWithで始まりと終わりを調べる

文字列が特定の言葉で始まっているか、または終わっているかを確認したいときは、startsWith() と endsWith() を使います。

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

        System.out.println(fileName.startsWith("rep"));
        System.out.println(fileName.endsWith(".pdf"));
    }
}

この例では、report.pdf が rep で始まるか、.pdf で終わるかを調べています。

メソッド調べること
startsWith()指定した文字列で始まるかrep で始まるか
endsWith()指定した文字列で終わるか.pdf で終わるか

鬼滅の刃でたとえると、任務名が 特別任務 で始まるか、報告書名が .pdf で終わるかを確認するようなものです。

ファイル名の拡張子を確認したり、メールアドレスの形式を簡単に見たりするときにも応用できます。

indexOfとlastIndexOfで位置を調べる

文字列の中で、ある文字や文字列がどこに現れるかを調べたいときは indexOf() と lastIndexOf() を使います。

class Main {
    public static void main(String[] args) {
        String text = "りんごとみかんとりんご";

        System.out.println(text.indexOf("りんご"));
        System.out.println(text.lastIndexOf("りんご"));
    }
}

indexOf() は、指定した文字列が最初に現れる位置を返します。
lastIndexOf() は、指定した文字列が最後に現れる位置を返します。

メソッド調べる内容
indexOf()最初に現れる位置
lastIndexOf()最後に現れる位置

もし見つからなかった場合、indexOf() は -1 を返します。

この -1 は、検索処理でよく使います。

int pos = text.indexOf("鬼");
if (pos != -1) {
    System.out.println("見つかりました。");
}

鬼滅の刃でたとえると、巻物の中に特定の地名や合図が書かれているか探し、見つかった場所を記録するような処理です。

toUpperCaseとtoLowerCaseで文字の形をそろえる

英字を含む文字列では、大文字小文字をそろえたいことがあります。

そのようなときは toUpperCase() と toLowerCase() を使います。

class Main {
    public static void main(String[] args) {
        String team = "JavaClub";

        System.out.println(team.toUpperCase());
        System.out.println(team.toLowerCase());
    }
}

このコードでは、JavaClub を大文字と小文字に変換しています。

メソッド変換結果
toUpperCase()大文字に変換
toLowerCase()小文字に変換

たとえば、YES、Yes、yes のように入力の表記がゆれる場合でも、全部小文字にしてから比較すれば判定しやすくなります。

鬼滅の刃でたとえると、隊士によって合言葉の書き方が少し違っていても、文字の形をそろえてから確認するようなものです。

Stringクラスの主なメソッドを整理する

ここまで出てきた主なメソッドを、戻り値と使いどころで整理しておきます。

メソッド戻り値主な使いどころ
length()int文字数チェック
charAt(int index)char特定位置の1文字取得
substring(int beginIndex)String途中から後ろを取り出す
substring(int beginIndex, int endIndex)String一部分だけ切り出す
equals(Object obj)boolean完全一致の比較
equalsIgnoreCase(String str)boolean大文字小文字を無視した比較
startsWith(String prefix)boolean先頭の確認
endsWith(String suffix)boolean末尾の確認
indexOf(String str)int最初に出る位置の検索
lastIndexOf(String str)int最後に出る位置の検索
toUpperCase()String大文字へ変換
toLowerCase()String小文字へ変換

メソッド名だけを丸暗記しようとすると大変です。

それよりも、

  • 調べるメソッドなのか
  • 比べるメソッドなのか
  • 切り出すメソッドなのか
  • 変換するメソッドなのか

という分類で見ると、かなり覚えやすくなります。

実用的な例で見る文字列チェック

ここでは、メールアドレス風の文字列に @ が含まれているかを調べる例を見てみましょう。

class Main {
    public static void main(String[] args) {
        // 確認する文字列
        String address = "user@example.com";

        // 文字数を表示する
        System.out.println("文字数は" + address.length() + "文字です。");

        // @ が含まれている位置を調べる
        int pos = address.indexOf("@");

        // 判定結果を表示する
        if (pos != -1) {
            System.out.println("@ は " + pos + " 番目の位置にあります。");
        } else {
            System.out.println("@ は見つかりませんでした。");
        }

        // 末尾の確認
        if (address.endsWith(".com")) {
            System.out.println(".com で終わっています。");
        }
    }
}

このプログラムでは、複数の String メソッドを組み合わせています。

処理使っているメソッド
文字数を調べるlength()
@ の位置を調べるindexOf()
.com で終わるか調べるendsWith()

String クラスのメソッドは、1つだけで使うよりも、組み合わせて使うことで実用的な力を発揮します。

鬼滅の刃でたとえると、任務の巻物を確認するときに、文字数を数え、特定の印を探し、最後の署名を確認するような流れです。

Stringクラスのメソッドは元の文字列を書き換えない

ここはとても大切です。

String クラスのメソッドの多くは、元の文字列そのものを書き換えるのではなく、変換後の新しい文字列を返します。

たとえば、toUpperCase() を呼び出してみます。

class Main {
    public static void main(String[] args) {
        String text = "java";

        System.out.println(text.toUpperCase());
        System.out.println(text);
    }
}

この場合、最初の表示は JAVA になります。
しかし、次の表示は java のままです。

つまり、text.toUpperCase() を呼び出しただけでは、text の中身そのものは変わりません。

処理表示
text.toUpperCase()JAVA
textjava

変換結果をあとでも使いたいなら、戻り値を受け取ります。

class Main {
    public static void main(String[] args) {
        String text = "java";
        text = text.toUpperCase();

        System.out.println(text);
    }
}

このように、text = text.toUpperCase(); と書くことで、変換後の文字列を text に入れ直しています。

鬼滅の刃でたとえると、巻物を直接書き換えるのではなく、変換後の新しい写しを作るようなものです。
その写しを今後使いたいなら、きちんと受け取って保管する必要があります。

図:Stringクラスは文字列を調べる道具箱

↓クリックすると拡大表示されます。

この図が示していること

この図では、1つの文字列 こんにちはJava に対して、String クラスの複数のメソッドを使えることを表しています。

length() で文字数を調べ、charAt(0) で先頭の文字を取り出し、substring(5) で一部分を切り出します。
さらに、startsWith("こん") で始まりを確認し、indexOf("Java") で Java が出てくる位置を探せます。

ここから分かるのは、String クラスは文字列を入れておくだけの箱ではなく、文字列をいろいろな角度から調べたり加工したりするための便利な機能を持っているということです。

図:Stringの変換メソッドは新しい文字列を返す

↓クリックすると拡大表示されます。

この図が示していること

この図では、toUpperCase() を呼び出したときに、元の text が直接書き換わるのではなく、新しい文字列 JAVA が返されることを示しています。

System.out.println(text.toUpperCase()); では JAVA が表示されます。
しかし、そのあとに System.out.println(text); とすると、text の中身は java のままです。

変換後の文字列を今後も使いたい場合は、text = text.toUpperCase(); のように、戻り値を受け取る必要があります。

ここから分かるのは、String クラスの変換メソッドは、元の文字列を直接変えるのではなく、変換結果として新しい文字列を返すということです。

よくある注意点

String クラスを使うときには、初心者がつまずきやすいポイントがいくつかあります。

注意点内容
位置は0から始まる1文字目は 0 番目
equals() で比較する文字列の内容比較では equals() が基本
substring() の終了位置は含まれない終了位置の手前までが取り出される
変換結果は新しい文字列元の文字列が自動で変わるわけではない

この4つは、String クラスを使ううえで特に大切です。

鬼滅の刃でたとえると、

注意点鬼滅の刃でたとえると
位置は0から巻物の最初の文字を第0番として数える
equals()合言葉を正しく照合する
substring()切り出し終了位置の直前まで写す
変換結果は新しい文字列元の巻物ではなく新しい写しを作る

このあたりを押さえておくと、文字列処理のミスがかなり減ります。

Stringクラスを学ぶと何が変わるか

String クラスを使えるようになると、Javaで作れるプログラムの幅が大きく広がります。

実際のプログラムでは、数値だけでなく文字列を扱う場面がとても多いからです。

たとえば、次のような処理につながります。

処理内容
名前の入力チェック空欄ではないか、長すぎないかを確認する
メールアドレスの簡易確認@ や .com が含まれるか調べる
商品コードの判定先頭文字や末尾の記号を確認する
メッセージの整形大文字小文字をそろえる
入力された言葉の検索特定の言葉が含まれるか調べる
データの切り出し一部分だけ取り出す

鬼滅の刃でたとえると、任務名、合言葉、地名、隊士名、報告書の内容を正しく読み取り、必要な部分だけ取り出せるようになるイメージです。

String クラスは、単なる基礎知識ではありません。
入力処理、検索、判定、加工など、実用的なプログラムづくりの土台になります。

Stringクラスを見るときの視点

String クラスのメソッドを学ぶときは、ただメソッド名を覚えるのではなく、次の視点で見ると理解しやすくなります。

見るポイント確かめること
何をするメソッドか調べるのか、比較するのか、切り出すのか
引数が必要か位置や比較対象の文字列を渡すか
戻り値は何か文字、文字列、整数、真偽値のどれか
元の文字列が変わるか新しい文字列が返るだけか

たとえば、length() は文字数を調べて int を返します。
charAt() は位置を渡して char を返します。
substring() は位置を渡して String を返します。
equals() は比較対象を渡して boolean を返します。

このように、メソッドごとに、

何を渡すのか。
何が返るのか。
元の文字列は変わるのか。

を確認すると、使い方がかなり整理されます。

String クラスは、Javaの中でも出番が多く、実践に直結しやすいクラスです。
ここで基本をしっかり押さえておくと、入力チェック、検索、判定、文字列加工など、いろいろな場面で役立てられるようになります。