Javaの文字列連結をやさしく理解する
まず安心して。ここで扱うのは「文字をつないで1つの文やラベルにする」すごく日常的な操作。仕組みがわかれば、出力メッセージやファイル名作り、ログ生成などで一気に楽になります。
文字列連結の基本(+ 演算子)
- ルール:
+は数値同士なら足し算、どちらかが文字列なら「文字列をつなぐ」。 - 例:
System.out.println("Hello" + "World"); // HelloWorld
System.out.println("ID:" + 123); // ID:123
Java- ポイント: 片方が文字列になると、もう片方も文字列として扱われる。
計算順序に注意(左から順に処理)
- ルール:
+は左から順に評価される(左結合)。途中で文字列になったら、その後は連結が続く。 - 例題1(数値→文字列):
String s = 10 + 20 + "円";
System.out.println(s); // 30円
// 10 + 20 = 30(数値同士だから足し算)
// 30 + "円" = "30円"(ここで文字列に変換)
Java- 例題2(文字列→連結続行):
String s = "円" + 10 + 20;
System.out.println(s); // 円1020
// "円" + 10 = "円10"
// "円10" + 20 = "円1020"
Java- 間違い防止: 計算をしてから連結したいなら括弧を使う。
String s = "合計:" + (10 + 20); // 合計:30
Javaよくある落とし穴と対策
- 落とし穴1: 意図せず文字列連結に流れる
例:
System.out.println("合計:" + 10 + 20); // 合計:1020(意図外)
System.out.println("合計:" + (10 + 20)); // 合計:30(正しい)
Java- 落とし穴2: 改行や区切り忘れ
例:
System.out.println("名前:" + "太郎" + "年齢:" + 20);
// 名前:太郎年齢:20(区切りがなくて読みにくい)
System.out.println("名前: 太郎, 年齢: " + 20);
// 名前: 太郎, 年齢: 20(区切りを入れて読みやすく)
Java- 落とし穴3: nullを連結
例:
String nick = null;
System.out.println("Nick:" + nick); // Nick:null(そのまま文字「null」になる)
Java対策: nullチェックして代替文字を用意。
String nick = null;
System.out.println("Nick:" + (nick != null ? nick : "(未設定)"));
Javaたくさん連結するなら StringBuilder
- 理由:
+を何度も使うと、毎回新しい文字列が作られて非効率。StringBuilderは中にためて最後にまとめて文字列化する。 - 基本形:
StringBuilder sb = new StringBuilder();
sb.append("商品:");
sb.append("りんご");
sb.append(", 個数:");
sb.append(5);
sb.append(", 合計:");
sb.append(120);
String result = sb.toString();
System.out.println(result); // 商品:りんご, 個数:5, 合計:120
Java- 繰り返しで威力発揮:
String[] names = {"佐藤", "鈴木", "高橋"};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < names.length; i++) {
if (i > 0) sb.append(", "); // 区切りを追加
sb.append(names[i]);
}
System.out.println(sb.toString()); // 佐藤, 鈴木, 高橋
Java例題で練習
例題A: 会員ラベルを作る
- 目的: 名前・会員番号・ステータスを連結して1行表示。
- コード:
String name = "山田太郎";
int id = 4821;
boolean premium = true;
String label = "会員:" + name + " / ID:" + id + " / ステータス:" + (premium ? "プレミアム" : "通常");
System.out.println(label);
// 会員:山田太郎 / ID:4821 / ステータス:プレミアム
Java- 学び: 三項演算子で条件に応じた文字列を差し込む。
例題B: 合計金額の表示(計算と連結の混在)
- 目的: 合計を計算してから表示。
- コード:
int price = 450;
int qty = 3;
int total = price * qty;
System.out.println("単価:" + price + "円, 個数:" + qty + " → 合計:" + total + "円");
// 単価:450円, 個数:3 → 合計:1350円
Java- 学び: 計算は数値同士で先に行い、その結果を連結。
例題C: CSV風テキストの生成(StringBuilder)
- 目的: 複数レコードを区切り付きで1行にする。
- コード:
String[] items = {"pen", "note", "eraser"};
int[] prices = {120, 200, 80};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < items.length; i++) {
if (i > 0) sb.append(" | ");
sb.append(items[i]).append(":").append(prices[i]).append("円");
}
System.out.println(sb.toString());
// pen:120円 | note:200円 | eraser:80円
Java- 学び: appendは連続してつなげられる。区切り文字は「最初以外につける」と綺麗に書ける。
実務でのコツ
- 明示性: 計算が混ざる箇所は必ず括弧で「ここは計算」と示す。
- 可読性: 区切りやスペース、改行(”\n”)を適切に入れる。
- 拡張性: 繰り返しや大量連結は
StringBuilder、単発の少量連結は+で十分。 - 保守性: 「テンプレート文字列」をひとつの変数にまとめてから差し込むと読みやすい。
String template = "商品:%s, 個数:%d, 合計:%d円";
String message = String.format(template, "みかん", 4, 320);
System.out.println(message);
// 商品:みかん, 個数:4, 合計:320円
Java
