十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

public interface FormattableFormattable 接口必须由任何需要使用 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."
 格式化表对于多线程访问不一定是安全的。 线程安全是可选的,可以由扩展和实现此接口的类强制执行。
除非另有说明,否则将 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#out() 或 Formatter#locale() 来分别获取此格式化程序使用的 Appendable 或 Locale。 | 
| flags | 标志修改输出格式。 该值被解释为位掩码。 可以设置以下标志的任意组合:FormattableFlags#LEFT_JUSTIFY、FormattableFlags#UPPERCASE 和 FormattableFlags#ALTERNATE。 如果没有设置标志,则应用实现类的默认格式。 | 
| width | 要写入输出的最小字符数。 如果转换后的值的长度小于宽度,则输出将用 ' ' 填充,直到字符总数等于宽度。 默认情况下,填充位于开头。 如果设置了 FormattableFlags#LEFT_JUSTIFY 标志,则填充将在末尾。 如果宽度为-1,则没有最小值。 | 
| precision | 要写入输出的最大字符数。 精度在宽度之前应用,因此即使宽度大于精度,输出也会被截断为精度字符。 如果精度为 -1,则对字符数没有明确限制。 | 
Throws:
| Throw名称 | Throw描述 | 
|---|---|
| IllegalFormatException | 如果任何参数无效。 |