1. 3 桁の価格はカンマなしで表示される
  2. 6 桁の価格は 3 桁ごとにカンマで区切られる
  3. 空文字の商品名と 0 円でも書式化できる
  4. 4 桁の価格にもカンマが入る
  5. 7 桁の価格は 2 つのカンマで区切られる
コース一覧
Java 中級:コレクション・Stream・例外処理
String.format で書式化

Java 中級:コレクション・Stream・例外処理

コレクション、ジェネリクス、例外処理、Stream API、関数型インターフェース、日付処理、ファイル I/O、継承など Java の中級トピックを実践的に学べるコースです。Java の基礎文法とオブジェクト指向を理解している学習者を対象に、現場の Java コードを読み書きするための知識を補強します。約 16 時間 (1 日 30 分 × 32 日) で 64 レッスンを修了でき、修了後は Spring Boot や業務システム開発に必要な Java 力が身につきます。

1
コレクション基礎
01. ArrayList を使う5分
02. List を走査する5分
03. 要素の削除と検索5分
04. HashMap の基本5分
05. Map を走査する5分
06. Set で重複を排除5分
07. Collections クラスの便利メソッド5分
08. コレクション基礎 まとめクイズ5分
2
ジェネリクス
01. ジェネリッククラスを作る5分
02. ジェネリックメソッド5分
03. 境界型パラメータ5分
04. ワイルドカード ?5分
05. Pair<K,V> を作る5分
06. ジェネリクス まとめクイズ5分
3
例外処理
01. try-catch で例外をつかむ5分
02. 複数の catch ブロック5分
03. throws と例外の伝播5分
04. 独自の例外を作る5分
05. try-with-resources5分
06. finally ブロック5分
07. 例外処理 まとめクイズ5分
4
Stream API
01. Stream を作る5分
02. filter で絞り込む5分
03. map で変換する5分
04. reduce で集約する5分
05. collect で集める5分
06. sorted で並び替え5分
07. distinct で重複排除5分
08. limit と skip5分
09. 並列ストリーム5分
10. Stream API まとめクイズ5分
5
関数型インターフェース
01. ラムダ式の基本5分
02. メソッド参照 ::5分
03. Function インターフェース5分
04. Predicate インターフェース5分
05. Consumer と Supplier5分
06. BiFunction と 2 引数の関数5分
07. 関数型インターフェース まとめクイズ5分
6
文字列操作
01. String.format で書式化5分
02. StringBuilder で連結5分
03. 正規表現の基本5分
04. split と join5分
05. 文字列操作 まとめクイズ5分
7
日付と時刻
01. LocalDate で日付を扱う5分
02. LocalDateTime で時刻も扱う5分
03. Duration で時間差を計算5分
04. 日付の書式化とパース5分
05. 日付の加減算5分
06. 日付と時刻 まとめクイズ5分
8
ファイル I/O
01. Files でファイルに書き込む5分
02. ファイルを行単位で読む5分
03. Path でファイルパスを扱う5分
04. BufferedReader と Stream API5分
05. ファイルの存在確認と削除5分
06. ファイル I/O まとめクイズ5分
9
継承とポリモーフィズム
01. extends で継承する5分
02. super で親を呼ぶ5分
03. メソッドのオーバーライド5分
04. abstract で抽象クラス5分
05. interface で契約を定義5分
06. default メソッド5分
07. instanceof と型パターン5分
08. ポリモーフィズムを活かす5分
09. 継承とポリモーフィズム まとめクイズ5分

String.format で書式化

桁の大きい数字を、そのまま出すと読めない

+ での連結はもう自由に書けるようになりました。ところが画面に数字を出す段になると、+ だけでは足りない場面が出てきます。

Java

System.out.println("売上 " + 1234567 + " 円"); // 売上 1234567 円

1234567 が何百万なのか、目で数えないと分かりません。3 桁ごとに区切りたい、小数を 2 桁で止めたい、伝票番号の桁を揃えたい。こうした「最後のひと整え」を引き受けるのが String.format です。

% の場所に、引数が順番に入る

String.format は、第 1 引数に型枠を書いた文字列を渡し、第 2 引数から値を順番に並べます。% で始まる印が置いてある場所に、値が前から順に流し込まれます。

Java

String a = String.format("%s さんの平均は %.1f 点です", "田中", 87.25); // 田中 さんの平均は 87.3 点です String b = String.format("売上 %,d 円", 1234567); // 売上 1,234,567 円 String c = String.format("伝票番号 %05d", 42); // 伝票番号 00042

課題で必要になるのは次の 4 つです。%s は文字列をそのまま入れます。%d は整数を入れます。%,d は整数を 3 桁ごとにカンマで区切ります。%.1f は小数を 1 桁に丸めます。丸める桁を増やしたければ %.2f のように数字を変えるだけです。

%05d の 0 と 5 は「5 桁になるまで 0 で埋める」という指定です。カンマの , も 0 も % と d の間に書く飾りで、順番はフラグ、幅、精度、型と決まっています。全部を覚える必要はなく、必要になったときに 1 つずつ足していけば足ります。

型が合っていなくても、コンパイルは通る

String.format の落とし穴は、間違いが実行時まで表に出ないことです。

Java

String.format("%d 件", "100"); // 実行時に IllegalFormatConversionException String.format("%s と %s", "java"); // 実行時に MissingFormatArgumentException

%d の場所に文字列を渡しても、コンパイルは通ってしまいます。逆に %s は何でも受け取れるので、型に自信がないときの逃げ道になります。

印の数より引数が少ないときも実行時に落ちます。多すぎる場合はエラーにならず、余った引数が黙って無視されます。書いたら一度目で追って、印と値を 1 対 1 で数え合わせるのが確実です。

解説

似た System.out.printf は、整形した結果をその場で画面に流すだけで、文字列を返しません。戻り値をテストで比べる課題では使えないので、文字列がほしいときは String.format を選びます。

課題では、受け取った値を 1 本の文字列に組み立てて返します。区切りのカンマが要る場所で %d を書いてしまうとカンマが出ず、期待した表示になりません。どの印を使うかだけ、先に決めてから書き始めてください。

要件

  1. クラス名は Solution、メソッド名は priceLabel、引数は String name, int price の 2 つ、戻り値の型は String にすること
  2. 本文中で示した String.format("%s: ¥%,d", name, price) の書式指定子を使って整形すること (+ 連結や StringBuilder は使わない)
  3. %,d のカンマフラグを必ず付け、120000 が "120,000" のように千の位区切りで表示されるようにすること

入出力例

priceLabel("リンゴ", 100) → "リンゴ: ¥100" priceLabel("ノートPC", 120000) → "ノートPC: ¥120,000" priceLabel("", 0) → ": ¥0" priceLabel("コーヒー", 1234) → "コーヒー: ¥1,234" priceLabel("冷蔵庫", 1500000) → "冷蔵庫: ¥1,500,000"

ヒント

書式は `"%s: ¥%,d"` の 1 行で完結します。`%s` に `name`、`%,d` に `price` を渡すと、`:` の後ろは半角スペース、`¥` の後ろはスペースなしで連結されます

`%d` だけだとカンマが入らず `"120000"` のままになります。千の位区切りには `%,d` のように `,` フラグを忘れずに付けましょう

`String.format` は標準出力には出さず、整形した文字列を返すだけです。`System.out.printf` ではなく `String.format` を `return` してください

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • StringBuilder で連結

    Java の `String` は immutable で `+` 連結はループ内で性能が落ちるため、可変な文字列ビルダー `StringBuilder` を使って効率良く文字列を組み立てる方法を学ぶ。

  • 正規表現の基本

    Java の正規表現の基本パターンとメタ文字のエスケープを学び、String.matches を使って簡易なメール形式かを判定する関数を書いてみよう。

  • split と join

    Java の文字列を扱う上で必須の `String.split` と `String.join` を学び、CSV を逆順に並べ替えるメソッドを実装してみよう。

  • 文字列操作 まとめクイズ

    中級「文字列操作」章で学んだ `String.format` / `StringBuilder` / 正規表現 / `split` / `join` の使い分けを 4 択で総ざらいする章末まとめ。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 引数位置引数=順番で渡す。
  • コンパイルソースをバイトコードへ変換する処理
  • 戻り値呼び出し元への返答を表す点線矢印
  • テストバグを見つける工程
  • クラスデータと振る舞いを束ねる単位
  • メソッドクラスに属する関数
main.java
学習モード
エディタを読み込んでいます

メモ

String.format で書式化

⌘S で保存