Most visited

Recently visited

Added in API level 1


public interface Formattable


Formattable接口必须由任何需要使用Formatter转换说明符Formatter执行自定义格式化的类来实现。 该界面允许对任意对象进行格式化的基本控制。 例如,以下类根据标志和长度限制打印出股票名称的不同表示形式:

   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
           } 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(' ');
                       sb.insert(0, ' ');


       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."

对于多线程访问,Formattables不一定是安全的。 线程安全是可选的,可以通过扩展和实现这个接口的类来强制执行。

除非另有说明,否则将 null参数传递给此接口中的任何方法将导致引发 NullPointerException


Public methods

abstract void formatTo(Formatter formatter, int flags, int width, int precision)

使用提供的 formatter格式化对象。

Public methods


Added in API level 1
void formatTo (Formatter formatter, 
                int flags, 
                int width, 
                int precision)

使用提供的 formatter格式化对象。

formatter Formatter: The formatter. Implementing classes may call formatter.out() or formatter.locale() to obtain the Appendable or Locale used by this formatter respectively.
flags int: The flags modify the output format. The value is interpreted as a bitmask. Any combination of the following flags may be set: LEFT_JUSTIFY, UPPERCASE, and ALTERNATE. If no flags are set, the default formatting of the implementing class will apply.
width int: The minimum number of characters to be written to the output. If the length of the converted value is less than the width then the output will be padded by '  ' until the total number of characters equals width. The padding is at the beginning by default. If the LEFT_JUSTIFY flag is set then the padding will be at the end. If width is -1 then there is no minimum.
precision int: The maximum number of characters to be written to the output. The precision is applied before the width, thus the output will be truncated to precision characters even if the width is greater than the precision. If precision is -1 then there is no explicit limit on the number of characters.
IllegalFormatException If any of the parameters are invalid. For specification of all possible formatting errors, see the Details section of the formatter class specification.