このページを正しく表示するには、ブラウザでJavaScriptを有効にする必要があります。
コース: 重要なクラス
レッスン: 基本的なI/O
セクション: I/Oストリーム
サブセクション: スキャンとフォーマット
フォーマット
ホームページ > 重要なクラス > 基本的なI/O

フォーマット

データの形式を整えるフォーマット処理を実装しているストリーム・オブジェクトは、文字ストリーム・クラスであるPrintWriterのインスタンスと、バイト・ストリーム・クラスであるPrintStreamのインスタンスです。

注:使用する可能性があるPrintStreamオブジェクトは、System.outSystem.errだけです。 (これらのオブジェクトの詳細は、『コマンドラインを使用したI/O』を参照してください。) フォーマットされた出力ストリームを作成する必要がある場合は、PrintStreamではなくPrintWriterをインスタンス化してください。

すべてのバイト・ストリーム・オブジェクトと文字ストリーム・オブジェクトと同様に、PrintStreamPrintWriterのインスタンスも、単純なバイト出力および文字出力のためのwriteメソッドの標準的なセットを実装しています。 さらに、PrintStreamPrintWriterのいずれも、内部データをフォーマットされた出力に変換するための、同じメソッドのセットを実装しています。 次の2つのレベルのフォーマット機能が用意されています。

printメソッドとprintlnメソッド

printメソッドとprintlnメソッドでは、単一の値を、適切なtoStringメソッドを使用して変換してから出力します。 この動作は、サンプルのRootで確認できます。
public class Root {
    public static void main(String[] args) {
        int i = 2;
        double r = Math.sqrt(i);
        
        System.out.print("The square root of ");
        System.out.print(i);
        System.out.print(" is ");
        System.out.print(r);
        System.out.println(".");

        i = 5;
        r = Math.sqrt(i);
        System.out.println("The square root of " + i + " is " + r + ".");
    }
}
Rootの出力結果は次のとおりです。
The square root of 2 is 1.4142135623730951.
The square root of 5 is 2.23606797749979.
このサンプルでは、変数iと変数rは2回変換されています。 1回目は、オーバーロードされたprintメソッド内のコードによって行われ、2回目は、Javaコンパイラによって自動生成された変換コードによって実行されます。この変換コードでもtoStringが利用されます。 この方法ではあらゆる値を文字列に変換できますが、出力される文字列を細かく制御することはできません。

formatメソッド

formatメソッドは、書式文字列に基づいて複数の引数の変換と書式設定を行います。 書式文字列は、書式指示子を含む静的なテキストです。書式指示子が含まれない場合、書式文字列はそのまま出力されます。

書式文字列では、多くの機能がサポートされます。 このチュートリアルでは、一部の基本的な事項のみを取り上げます。 全機能の説明については、API仕様の『Format String Syntax』を参照してください。

次のRoot2のサンプルでは、1回のformatの呼出しで2つの値の書式を設定しています。

public class Root2 {
    public static void main(String[] args) {
        int i = 2;
        double r = Math.sqrt(i);
        
        System.out.format("The square root of %d is %f.%n", i, r);
    }
}
出力結果は次のとおりです。
The square root of 2 is 1.414214.
このプログラムで使用されている3つの書式指示子のように、すべての書式指示子は%で始まり、1文字または2文字の変換文字で終わります。変換文字は、どのような書式の出力を生成するかを指定するものです。 ここでは、次の3つの変換文字が使用されています。 その他の変換文字について、一部を次に紹介します。 これ以外にも数多くの変換文字があります。

注:%%%nを除き、すべての書式指示子は引数に対応させる必要があります。 対応していない場合は、例外がスローされます。

Javaプログラミング言語では、エスケープ・シーケンスの\nを使用すると常に改行文字(\u000A)が生成されます。 改行文字を特に必要としている場合を除いて、\nは使用しないでください。 ローカル・プラットフォームに合った正しい行区切り文字を取得するには、%nを使用してください。


変換文字に加えて、書式指示子には、出力の書式をさらに細かく指定するために、いくつかの追加要素を含めることができます。 次のサンプルのFormatでは、追加要素をできる限り使用しています。
public class Format {
    public static void main(String[] args) {
        System.out.format("%f, %1$+020.10f %n", Math.PI);
    }
}
出力結果は次のとおりです。
3.141593, +00000003.1415926536
追加要素はすべてオプションです。 次の図は、書式指示子がどのような要素で構成されているかを表しています。

Elements of a format specifier

書式指示子の要素

要素は、図に示された順番で指定する必要があります。 オプションの要素を右から順に説明します。

サンプル・プログラムで問題が発生した場合は、 『Compiling and Running the Examples: FAQs』を参照してください。
フィードバックをお寄せください。さまざまなご意見をお待ちしております。

前のページ: スキャン
次のページ: コマンドラインを使用したI/O