public interface Formattable
Formatter
の「s」変換指示子を使用してカスタムの書式設定を行う必要のあるクラスです。このインタフェースは、任意のオブジェクトを書式設定するための基本コントロールとして使用できます。たとえば、次のクラスは、フラグおよび長さ制限に基づいて株式銘柄のさまざまな表現を出力します。import java.nio.CharBuffer; import java.util.Formatter; import java.util.Formattable; import java.util.Locale; import static java.util.FormattableFlags.*; ... public class StockName implements Formattable { private String symbol, companyName, frenchCompanyName; public StockName(String symbol, String companyName, String frenchCompanyName) { ... } ... public void formatTo(Formatter fmt, int f, int width, int precision) { StringBuilder sb = new StringBuilder(); // decide form of name String name = companyName; if (fmt.locale().equals(Locale.FRANCE)) name = frenchCompanyName; boolean alternate = (f & ALTERNATE) == ALTERNATE; boolean usesymbol = alternate || (precision != -1 && precision < 10); String out = (usesymbol ? symbol : name); // apply precision if (precision == -1 || out.length() < precision) { // write it all sb.append(out); } else { sb.append(out.substring(0, precision - 1)).append('*'); } // apply width and justification int len = sb.length(); if (len < width) for (int i = 0; i < width - len; i++) if ((f & LEFT_JUSTIFY) == LEFT_JUSTIFY) sb.append(' '); else sb.insert(0, ' '); fmt.format(sb.toString()); } public String toString() { return String.format("%s - %s", symbol, companyName); } }
Formatter
と併用する場合、前述のクラスは次のさまざまな書式文字列を出力します。Formatter fmt = new Formatter(); StockName sn = new StockName("HUGE", "Huge Fruit, Inc.", "Fruit Titanesque, Inc."); fmt.format("%s", sn); // -> "Huge Fruit, Inc." fmt.format("%s", sn.toString()); // -> "HUGE - Huge Fruit, Inc." fmt.format("%#s", sn); // -> "HUGE" fmt.format("%-10.8s", sn); // -> "HUGE " fmt.format("%.12s", sn); // -> "Huge Fruit,*" fmt.format(Locale.FRANCE, "%25s", sn); // -> " Fruit Titanesque, Inc."
マルチスレッド・アクセスを実行する場合、Formattableは必ずしも安全ではありません。スレッドの安全性は、このインタフェースを拡張および実装するクラスによってオプションで保証されます。
特に指定されていないかぎり、null引数をこのインタフェースのメソッドに渡すと、NullPointerException
がスローされます。
修飾子と型 | メソッドと説明 |
---|---|
void |
formatTo(Formatter formatter, int flags, int width, int precision)
指定された
formatter を使用してオブジェクトの書式設定を行います。 |
void formatTo(Formatter formatter, int flags, int width, int precision)
formatter
を使用してオブジェクトの書式設定を行います。formatter
- formatter
。クラスの実装によりformatter.out()
またはformatter.locale()
が呼び出され、このformatterで使用されるAppendable
またはLocale
がそれぞれ取得される。flags
- フラグにより出力書式が変更される。値はビット・マスクとして解釈される。フラグFormattableFlags.LEFT_JUSTIFY
、FormattableFlags.UPPERCASE
、およびFormattableFlags.ALTERNATE
を任意に組み合わせて設定できる。フラグが設定されていない場合、実装するクラスのデフォルト書式が適用される。width
- 出力に書き込まれる最小文字数。変換後の値の長さがwidthより小さい場合、総文字数がwidthに等しくなるまで出力に' 'がパディングされる。デフォルトでは、パディングは先頭に対して行われる。FormattableFlags.LEFT_JUSTIFY
フラグが設定された場合、パディングは終端に対して行われる。widthが-1の場合、最小値は存在しない。precision
- 出力に書き込まれる最大文字数。precisionはwidthの前に適用されるため、widthの値がprecisionより大きい場合でも、出力はprecisionで指定された文字数に切り詰められる。precisionが-1の場合、文字数に明示的な制限は存在しない。IllegalFormatException
- いずれのパラメータも不正な場合。考えられるすべての書式エラーの仕様については、フォーマッタ・クラス仕様の「詳細」セクションを参照。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.