`

Java的格式化输出

阅读更多
看API可以看出
String和PrintStrean的printf可以格式化字符串以及下面可能看到的System.err

public PrintStream format(String format,Object... args)
public PrintStream printf(Locale l,
                          String format,
                          Object... args)

public PrintStream printf(String format,Object... args)

public PrintStream format(Locale l,
                          String format,
                          Object... args)

这两种方法等价!!

String的


这种格式化输出 来源于Formatter来!在包java。util中!

但经常被其他类当作静态方法调用

例如

// Writes a formatted string to System.out.
   System.out.format("Local time: %tT", Calendar.getInstance());
   // -> "Local time: 13:34:18"

   // Writes formatted output to System.err.
   System.err.printf("Unable to open file '%1$s': %2$s",
                     fileName, exception.getMessage());
   // -> "Unable to open file 'food': No such file or 
directory"
    StringBuilder sb = new StringBuilder();
   // Send all output to the Appendable object sb
   Formatter formatter = new Formatter(sb, Locale.US);

   // Explicit argument indices may be used to re-order output.
   formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")


首先说下 格式化的格式

引用

常规类型、字符类型和数值类型的格式说明符的语法如下:
       %[argument_index$][flags][width][.precision]conversion
1、 可选的 argument_index 是一个十进制整数,用于表明参数在参数列表中的位置。
     第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。

讲解下
例如 上面的例子
formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");

4$是对  d进行格式化!当然输出顺序是按照 4-3-2-1的顺序!!
如果这样呢?
System.out.printf("%3$2s %2$2s %1$2s", "a", "b", "c", "d");
只输出3-2-1


2、可选 flags 是修改输出格式的字符集。有效标志集取决于转换类型。
   是把index的数按照flag输出 并且输出 后面的字符串 
   System.out.printf("%2$s" , "a2345", 1.0);
   输出  1.0
3、可选 width 是一个非负十进制整数,表明要向输出中写入的最少字符数。

  
引用
对于常规参数类型,精度是将向输出中写入的最多字符数。

    对于浮点转换 'e'、'E' 和 'f',精度是小数点分隔符后的位数。
    如果转换是 'g'    或 'G',那么精度是舍入计算后所得数值的所有位数。
    如果转换是 'a' 或 'A',则不必指定精度。

   对于字符、整数和日期/时间参数类型转换,以及百分比和行分隔符转换,
   精度是不适用的;如果提供精度,则会抛出异常。

4、可选 precision 是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。

5、所需 conversion 是一个表明应该如何格式化参数的字符。给定参数的有效转换集取决于参数的数
例如时间中 要格式化时间!日期 等等!

格式化常规响
  第一项是为arg(参数)null是的输出值
  常见的有
   b(false,boolean),
   h(null,Integer.toHexString(arg.hashcode()))
   s(null,String),c(unicode字符),
    d(十进制整数),o(八进制),x(十六进制),
   e(用计算机科学记数法表示的十进制数 )
   t(时间)
   %(b百分百)
   n(平台的换行符)
更多的请到api文档上找相应的!!

时间格式!!

   格式时间 有特定的表示方法!!
  %[argument_index$][flags][width]conversion
  conversion是必须的!!
  所需的 conversion 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。第二个 字符表明所使用的格式。这些字符类似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的字符。

在不产生歧义的条件下 index$可以省略!!例如下面的情况!!
例如 
   Calendar c = ...;
   String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

   String s2 = String.format("Duke's Birthday: %1$tm %<te,%<tY", c);

'm'  月份,被格式化为必要时带前导零的两位数,即 01 - 13。 
'd'  一个月中的天数,被格式化为必要时带前导零两位数,即 01 - 31 
'e'  一个月中的天数,被格式化为两位数,即 1 - 31。 
更多去找api包!!
看这个例子
System.out.printf("Your weight on %s is %f%n",p, p.surfaceWeight(mass));

这里的%n指的是 换行符!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics