10分でマスター!JavaのStringメソッド使いこなし術:新人エンジニアがハマる罠を回避せよ
こんにちは。ゆうせいです。
Javaを学び始めたばかりの皆さん、いよいよ「文字列操作」の世界へようこそ!
現場に出ると、実は計算処理よりも「文字を切り取る」「特定の文字を探す」「形を整える」といった文字列の加工業務が圧倒的に多いことを知っていますか?
今日は、JavaのStringクラスに用意されている便利な武器(メソッド)たちを、ストーリー形式で楽しく学んでいきましょう。
まずは、これから皆さんと一緒に学習していくロードマップを確認してください。
本コースの章構成
第1章:文字列の「中身」を正しく比較・検証する
equalsとequalsIgnoreCaseの違い、isEmptyとisBlankの使い分けなど、基本かつ最重要の判定メソッド。
第2章:欲しい部分だけを「取り出す・探す」
substringによる部分抽出や、indexOfによる位置特定、containsなどによる存在チェック。
第3章:文字列を「変身させる・分割する」
replaceによる置換、splitによる分割、そしてtrimとstripの意外な違い。
第4章:プロの書き方「整形とパフォーマンス」
formatメソッドによる綺麗な表示と、String連結 vs StringBuilderの速度差の秘密。
それでは、記念すべき第1章をスタートしましょう!
第1章:文字列の「中身」を正しく比較・検証する
1. 概要
この章では、プログラムが「この文字は正しいか?」を判断するためのメソッドを学びます。
特に、見た目が同じでもプログラム上では違うと判定されるケースや、空白の扱いに焦点を当てます。
皆さんは「空っぽ」と「スペースが入っている」の違い、説明できますか?
2. 対象メソッド
- equals / equalsIgnoreCase
- isEmpty / isBlank
3. サンプルコード
public class StringCheck {
public static void main(String[] args) {
String input1 = "Java";
String input2 = "java";
String input3 = " ";
System.out.println(input1.equals(input2));
System.out.println(input1.equalsIgnoreCase(input2));
System.out.println(input3.isEmpty());
System.out.println(input3.isBlank());
}
}
4. 実行結果
false
true
false
true
5. 逐次解説
1行目:StringCheckという名前のクラスを宣言しています。
2行目:プログラムの実行起点となるメインメソッドです。
3行目:変数input1に「Java」という文字列を代入します。
4行目:変数input2に「java」という小文字の文字列を代入します。
5行目:変数input3に「半角スペース2つ」の文字列を代入します。
7行目:equalsで比較します。大文字と小文字が違うのでfalse(偽)が返ります。
8行目:equalsIgnoreCaseを使います。大文字小文字を無視するため、true(真)になります。
9行目:isEmptyで判定します。文字数が0ではない(スペースがある)のでfalseです。
10行目:isBlankで判定します。中身が空白だけなので、Java 11以降ではtrueになります。
6. イメージ
例えば、会員登録のログイン画面を想像してください。
equalsは「厳格な門番」です。パスワードが1文字でも大文字小文字が違えば通しません。
対してequalsIgnoreCaseは「おおらかな門番」です。IDの入力などで、大文字でも小文字でも本人なら通してあげるイメージですね。
isEmptyは「箱の中に何も入っていないか」を見ますが、isBlankは「箱の中にホコリ(空白)しか入っていないか」まで見抜いてくれる高性能なセンサーのようなものです。
7. よくある誤解
「文字列の比較は == でいいよね?」という初心者の声をよく聞きますが、これは非常に危険な罠です!
Javaにおいて == は「同じ住所(メモリ上の場所)にデータがあるか」を確認するものです。
中身の値が同じかどうかを調べたいときは、必ずequalsメソッドを使ってください。これを忘れると、見た目は同じなのに動かないという地獄のデバッグが始まります。
8. 実務での重要性
実務では、ユーザーが入力したデータに「不要なスペース」が混じることが多々あります。
名前を入力する欄にスペースだけ入れて送信された場合、isEmptyだけでは「入力あり」と判定されてエラーの原因になります。
そのため、最新のJava現場ではisBlankを使って「実質的に空ではないか」をチェックするのが定石となっています。
9. 演習問題
問1:ユーザーから入力された「YES」という文字を、大文字小文字を区別せずに判定したい場合に使用するメソッドはどれですか?
問2:変数 str = " " (半角スペース1つ)があるとき、str.isEmpty() と str.isBlank() はそれぞれ何(trueかfalseか)を返しますか?
第1章、お疲れ様でした!基礎中の基礎ですが、ここを疎かにするとバグの温床になります。
次は、文字列の中から特定の情報を抜き出す「substring」などのテクニックを学んでいきましょう。
承知いたしました!それでは、第2章に進みましょう。 ここでは、長い文字列の中から「宝探し」をするような、実務で最も頻繁に使うメソッドたちを攻略します。
第2章:欲しい部分だけを「取り出す・探す」
1. 概要
この章では、大量のデータの中から特定の文字が「どこにあるか」を見つけ出し、その「前後を切り取る」技術を習得します。 例えば、メールアドレスからドメイン部分だけを抜き出したり、ファイル名から拡張子を特定したりする操作です。 インデックス(添え字)の数え方に独特のルールがあるので、そこを重点的に解説しますね。
2. 対象メソッド
- substring
- indexOf / lastIndexOf
- contains / startsWith / endsWith
3. サンプルコード
public class StringSearch {
public static void main(String[] args) {
String filename = "backup_20260320.zip";
// 1. 存在確認
System.out.println(filename.startsWith("backup"));
System.out.println(filename.endsWith(".zip"));
// 2. 位置検索
int underscorePos = filename.indexOf("_");
int dotPos = filename.lastIndexOf(".");
// 3. 切り出し
String datePart = filename.substring(7, 15);
String extension = filename.substring(dotPos + 1);
System.out.println("アンダーバーの位置: " + underscorePos);
System.out.println("日付部分: " + datePart);
System.out.println("拡張子: " + extension);
}
}
4. 実行結果
true true アンダーバーの位置: 6 日付部分: 20260320 拡張子: zip
5. 逐次解説
1行目:StringSearchクラスの宣言です。
4行目:対象となる文字列「backup_20260320.zip」を用意します。
7行目:startsWithで、文字列が「backup」から始まっているか確認します。
8行目:endsWithで、末尾が「.zip」で終わっているか確認します。
11行目:indexOfで、最初に見つかる「_」の番号を探します。0から数えるので、6番目になります。
12行目:lastIndexOfで、後ろから数えて最初に見つかる「.」の位置を探します。
15行目:substring(7, 15)で、7番目から15番目の手前までを抜き出します。
16行目:substringに引数を1つだけ渡すと、その位置から最後までをすべて抜き出します。
6. イメージ
Javaの文字列には、1文字ずつに背番号(インデックス)が振られています。 0番から始まることに注意してください! 「backup_」までで 0, 1, 2, 3, 4, 5, 6 です。 特に substring(開始, 終了) の「終了」は、「その番号の直前まで」という意味です。 ハサミでチョキンと切る場所をイメージしてください。 7番の「2」の左側にハサミを入れ、15番の「.」の左側にハサミを入れると、間の「20260320」がポロッと取れるわけです。
7. よくある誤解
「substring(7, 15) なら、15文字目まで含まれるのでは?」という勘違いが非常に多いです! 実際には「15番目の文字は含まれません」。 これは「終了インデックス - 開始インデックス = 抜き出す文字数」という計算を成り立たせるためのルールです。 15 - 7 = 8文字。確かに日付の「20260320」は8文字ですよね。この法則を覚えておくとミスが減りますよ。
8. 実務での重要性
実務では「ファイルパスからファイル名だけを取り出す」といった処理が頻発します。 その際、indexOf で区切り文字(/ や \)の位置を探し、そこを起点に substring するというコンボ技は必須テクニックです。 これを知らないと、わざわざ1文字ずつループで回して確認するという、非常に効率の悪いコードを書いてしまうことになります。
9. 演習問題
問1:文字列 "Hello World" に対して indexOf("o") を実行したときと、lastIndexOf("o") を実行したとき、それぞれ返ってくる数値は何ですか?
問2:メールアドレス "user@example.com" から、ドメイン名の "example.com" だけを抜き出すコードを substring と indexOf を使って書いてみてください。
お見事!これで文字列の「検索と抽出」はバッチリですね。 次は、いよいよ文字列を自由自在に作り変える第3章「変身と分割」に進みます。
絶好調ですね!第3章では、いよいよ文字列を「加工」する技術を学びます。 もらったデータをそのまま使うのではなく、システムが扱いやすい形に整える「職人芸」のような工程です。
第3章:文字列を「変身させる・分割する」
1. 概要
この章では、特定の文字を別の文字に置き換える「置換」と、長い一行のデータをバラバラに分解する「分割」、そして余計な余白を取り除く「掃除」のメソッドを習得します。 特に「空白」の削除には、古いJavaと新しいJavaで大きな違いがあるんですよ。
2. 対象メソッド
- replace / replaceAll / replaceFirst
- split
- trim / strip
3. サンプルコード
public class StringTransform {
public static void main(String[] args) {
String data = "apple,orange,banana";
String memo = " こんにちは 世界 "; // 全角スペース混じり
// 1. 分割
String[] fruits = data.split(",");
System.out.println(fruits[1]);
// 2. 置換
String newData = data.replace("apple", "strawberry");
System.out.println(newData);
// 3. 空白除去
System.out.println("trim: [" + memo.trim() + "]");
System.out.println("strip: [" + memo.strip() + "]");
}
}
4. 実行結果
orange strawberry,orange,banana trim: [こんにちは 世界] strip: [こんにちは 世界] (注:実行環境によっては strip の結果、全角スペースも消えます)
5. 逐次解説
1行目:StringTransformクラスの宣言です。
4行目:カンマ区切りの文字列「apple,orange,banana」を用意します。
5行目:前後を半角・全角スペースで囲った文字列を用意します。
8行目:split(",")で、カンマを境目に文字列を切り分け、配列に格納します。
9行目:配列の1番目(2つ目)である「orange」を表示します。
12行目:replaceを使って「apple」という単語を「strawberry」に一括置換します。
16行目:trimを使って前後の空白を消します。
17行目:stripを使って前後の空白を消します。
6. イメージ
splitメソッドは、文字列という長い「パン」を、カンマという「包丁」で切り分けるイメージです。切った後は、それぞれが独立した「一切れのパン(配列の要素)」になります。 置換メソッドについては、replaceは「単純な文字の置き換え」ですが、replaceAllは「正規表現」という特殊なルールを使って、例えば「数字だけを全部星マークにする」といった高度な魔法が使えます。 最後の掃除(trim/strip)は、玄関(先頭)と勝手口(末尾)のゴミを掃き出す作業だと思ってください。
7. よくある誤解
「trimを使えばどんな空白も消える!」と思っていませんか? 実は、昔からある trim メソッドは「半角スペース」しか消せません。 日本でよく使われる「全角スペース」は、trim では無視されて残ってしまうのです。 最新の Java(バージョン11以降)で登場した strip メソッドなら、全角スペースもしっかり認識して消してくれます。これ、テストに出るくらい重要ですよ!
8. 実務での重要性
CSVファイル(カンマで区切られたデータ)を読み込むとき、split メソッドは主役級の活躍をします。 また、置換メソッドは「電話番号のハイフンを抜く」といった処理でよく使われます。 replace と replaceAll の違いを知らずに replaceAll を使うと、特殊な記号(ドットなど)が予期せぬ動きをしてバグを引き起こすことがあるので、単純な置き換えなら replace を選ぶのが安全です。
9. 演習問題
問1:文字列 "123-4567-8901" からハイフンをすべて消して "12345678901" にしたい場合、どのメソッドを使うのが最も適していますか?
問2:文字列 "A,B,C" に対して split(",") を実行した結果、返ってくる変数の型は何ですか?
いよいよ次は最終章。 プログラムの見た目を整える「整形」と、新人時代に最も怒られやすい「パフォーマンス(処理速度)」のお話です。
ついに最終章ですね!ここまで来れば、Stringクラスの基礎はマスターしたも同然です。 最後は、プロのエンジニアとして「恥ずかしくないコード」を書くための、見た目と速度のテクニックを伝授します。
第4章:プロの書き方「整形とパフォーマンス」
1. 概要
この章では、バラバラなデータを綺麗に並べて表示する「整形」と、大量の文字列を扱うときの「落とし穴」を学びます。 特に、文字列を「+」でつなぎ合わせるという当たり前の操作が、実はコンピュータにとっては非常に重い作業になることがあるんです。
2. 対象メソッド
- format
- toUpperCase / toLowerCase
- StringBuilder(クラス)と append メソッド
3. サンプルコード
public class StringPerformance {
public static void main(String[] args) {
// 1. 整形(format)
String name = "田中";
int score = 95;
String message = String.format("氏名:%s、点数:%3d点", name, score);
System.out.println(message);
// 2. 大文字小文字(Locale考慮)
String upper = "java".toUpperCase();
System.out.println(upper);
// 3. 高速な連結(StringBuilder)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append("データ").append(i).append(" ");
}
System.out.println(sb.toString());
}
}
4. 実行結果
氏名:田中、点数: 95点 JAVA データ0 データ1 データ2 データ3 データ4
5. 逐次解説
1行目:StringPerformanceクラスの宣言です。
6行目:String.formatを使い、%s(文字列)や%3d(3桁の数値)という型紙に、変数nameとscoreを流し込みます。
10行目:toUpperCaseを使い、一括で大文字に変換します。
14行目:StringBuilderという「文字列の組み立て台」を用意します。
16行目:appendを使って、部品を次々とくっつけていきます。
18行目:最後にtoStringを呼び出して、完成した文字列を取り出します。
6. イメージ
「+」での連結は、新しい文字をくっつけるたびに「古い家を壊して、新しい大きな家を建て直す」ようなものです。100回連結すると、100回建て直しが発生します。これでは時間がかかりますよね。 一方の StringBuilder は、最初から広い土地を用意しておいて、そこに「家具(文字)をどんどん運び込む」イメージです。建て直しの手間がないので、圧倒的に速いんです!
7. よくある誤解
「toUpperCaseを使えば世界中どこでも同じ結果になる」と思っていませんか? 実はトルコ語など一部の言語では、小文字の「i」を大文字にすると、上に点がついた特別な文字になるという「ロケール問題」があります。 厳密なシステム開発では、String.toUpperCase(Locale.ROOT) のように、どの地域のルールを使うか指定するのがプロの作法です。
8. 実務での重要性
formatメソッドは、ログ出力やレポート作成で大活躍します。桁数を揃えて表示できるので、誰が見ても読みやすい出力になります。 また、ループ(for文)の中で文字列を「+」でつなぐコードは、大規模システムでは致命的な速度低下を招きます。先輩から「そこはStringBuilderを使って!」とレビューで指摘される前に、自分から使えるようになっておきましょう。
9. 演習問題
問1:String.format("金額は%5d円です", 120) と実行したとき、出力される「120」の前には半角スペースがいくつ入りますか?
問2:ループの中で 10,000 回文字列を連結する場合、「+」演算子と StringBuilder、どちらを使うべきですか?
締めくくり:今後の学習指針
お疲れ様でした!これでJDKのStringクラスにおける重要メソッドを一通り攻略しました。 今後の学習のアドバイスを3つ送ります。
- 公式ドキュメント(JavaDoc)を辞書にする: メソッドに迷ったら、Javaの公式リファレンスを見る癖をつけましょう。
- 実際に手を動かす: 読むだけでなく、自分のPCでコードを書いて実行結果を確認してください。
- 正規表現に触れてみる: replaceAll や split を使いこなすために、「正規表現」というルールを少しずつ勉強すると、文字列操作の達人になれます!
これにて本日の研修を終了します。Javaの世界はまだまだ広いですが、文字列をマスターした今のあなたなら、きっと楽しんで進めるはずです。応援しています!
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール


