Java | 基礎文法:標準出力

Java Java
スポンサーリンク

標準出力の全体像

標準出力(stdout)は「プログラムの結果やメッセージを画面(コンソール)へ出す」ための出力先です。Java では System.out(型は PrintStream)を使って行い、printprintlnprintfformat)の3兄弟で用途を使い分けます。基本は「テキストを出す」「改行で区切る」「書式指定で整える」の3点を押さえれば十分です。


基本の使い方と改行の扱い

print と println の違い

System.out.print("Hello");   // 改行なしで出力
System.out.println("World"); // 出力して改行(次の文字は新しい行から)
System.out.println(42);      // 数値もそのまま出力して改行
Java

print はそのまま出すだけ、println は出力後に改行を自動付与します。行を区切りたいときは println を基本にすると読みやすくなります。

改行コードとエスケープ

System.out.print("1行目\n2行目"); // \n で改行(Unix系)
System.out.print("タブ\t区切り"); // \t でタブ
System.out.print("ダブルクォート: \""); // \" で引用符
Java

文字列中の \n は改行、\t はタブ。Java の文字列リテラルでは「バックスラッシュ」で特殊文字を表現します。


書式化出力(printf/format)の使い方(重要ポイントの深掘り)

代表的な書式指定子

System.out.printf("整数=%d, 浮動小数=%.2f, 文字列=%s%n", 10, 3.14159, "Java");
// 出力例: 整数=10, 浮動小数=3.14, 文字列=Java
Java

%d(整数)、%f(小数)、%s(文字列)、%n(プラットフォーム依存の改行)を覚えると、ほぼの用途をカバーできます。%.2f のように精度指定で「小数点以下2桁」などを制御できます。

幅揃え・ゼロ埋め・左寄せ

System.out.printf("[%5d]%n", 42);    // 幅5で右寄せ: [   42]
System.out.printf("[%05d]%n", 42);   // ゼロ埋め:    [00042]
System.out.printf("[%-5s]%n", "A");  // 左寄せ:      [A    ]
Java

数表や列揃えでは「幅」「ゼロ埋め」「左寄せ」を使い、読みやすい表を作ります。%n を使うとOS非依存の改行になり、移植性が高まります。

ロケールを意識した書式(小数点・区切り)

System.out.printf(java.util.Locale.US, "%,.2f%n", 12345.678);      // 12,345.68
System.out.printf(java.util.Locale.GERMANY, "%,.2f%n", 12345.678); // 12.345,68
Java

国・地域で表記が変わる数値の出力は、ロケールを指定すると安全です。, フラグは「桁区切り」を付けます。


標準出力と標準エラーの違い(使い分けの設計)

System.out と System.err

System.out.println("処理開始");          // 通常メッセージ
System.err.println("エラー: 入力が不正"); // エラーメッセージ
Java

System.err は「エラーや警告」専用の出力先。コンソールでは同じ画面に見えますが、リダイレクト先を分けられるため、ログやパイプ処理で威力を発揮します。「正常系は out、異常系は err」に分けると運用が楽になります。

リダイレクトとパイプ(外部からの活用)

# 標準出力をファイルへ
java App > out.txt
# 標準エラーだけ別ファイルへ
java App 2> err.txt
# 標準出力を次コマンドへ渡す
java App | grep OK

CLI では「出力の使い分け」が後工程の効率を左右します。アプリ側で out/err を適切に分けておくと、運用で強くなります。


文字コード、バッファ、フラッシュ(重要ポイントの深掘り)

文字コードの前提

System.out はプラットフォームの既定エンコーディングに依存します。日本語の文字化けを避けたい場合は「実行環境の文字コード設定」を合わせるか、独自の PrintStream を用意して明示します。

var ps = new java.io.PrintStream(System.out, true, java.nio.charset.StandardCharsets.UTF_8);
ps.println("日本語の出力");
Java

IDE・端末側のエンコード設定も一致させるのが実務では重要です。

バッファリングと flush

出力は内部バッファに溜めて「まとめて書く」ことがあります。printlnprintf%n は行末で適度にフラッシュされますが、「進捗表示」などリアルタイム性が必要なら System.out.flush() を使います。

System.out.print("処理中...");
System.out.flush(); // すぐ表示させたいとき
Java

ストリームを閉じるときは close() でフラッシュされますが、標準出力は通常明示的に閉じません(他のライブラリ出力に影響するため)。


実用例で身につける

例 1: 表形式で綺麗に出す

public class Table {
    public static void main(String[] args) {
        System.out.printf("%-10s %6s %8s%n", "Name", "Qty", "Price");
        System.out.printf("%-10s %6d %8.2f%n", "Apple", 3, 120.0);
        System.out.printf("%-10s %6d %8.2f%n", "Banana", 12, 45.5);
    }
}
Java

列幅・寄せ・精度を組み合わせると、ログやレポートが一気に読みやすくなります。

例 2: 進捗バーの更新(フラッシュを活用)

public class Progress {
    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i <= 100; i += 10) {
            System.out.printf("\rProgress: %3d%%", i); // 行頭に復帰して上書き
            System.out.flush();
            Thread.sleep(100);
        }
        System.out.println(); // 最後に改行
    }
}
Java

\r で行頭へ戻り、同じ行を更新します。フラッシュで即時表示に。

例 3: ロケールに応じた数値表記

public class LocaleFormat {
    public static void main(String[] args) {
        double v = 12345.678;
        System.out.printf(java.util.Locale.US, "US: %,.2f%n", v);
        System.out.printf(java.util.Locale.JAPAN, "JP: %,.2f%n", v);
        System.out.printf(java.util.Locale.GERMANY, "DE: %,.2f%n", v);
    }
}
Java

国ごとの表記に合わせて、ユーザーに違和感のない出力を実現できます。


仕上げのアドバイス(重要部分のまとめ)

標準出力は「読み手に届く形」で出すのがすべてです。行区切りは println/%n、整形は printf の書式指定子、正常系と異常系は System.out/System.err に分ける。文字コードとフラッシュの挙動を理解し、必要に応じてロケールや列揃えで見やすさを徹底する。出力はテストにも運用にも直結します。「伝えるための書式」を選ぶ癖を、ここから身につけましょう。

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