六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 69|回复: 0

JDK5新特性:格式化输出

[复制链接]

升级  35.67%

93

主题

93

主题

93

主题

举人

Rank: 3Rank: 3

积分
307
 楼主| 发表于 2013-1-27 04:41:58 | 显示全部楼层 |阅读模式
DK5.0允许象C语言那样直接用printf()方法来格式化输出,并且提供了许多参数来格式化输入,调用也很简单:
<!---->
<!---->
            System.out.format("Pi is   approximately  %f", Math.Pi);
               System.out.printf("Pi   is approximately  %f", Math.Pi);
             printf()和 format() 方法具有相同的功能. System.out 是 java.io.PrintStream的实例. PrintStream, java.io.PrintWriter,   和   java.lang.String 每个类都有四个新的格式化方法:
            format( String format, Object... args);
            printf( String format, Object... args);
            format( Locale locale, String format,   Object... args);
            printf( Locale locale, String format,   Object... args);
             
            
同时,以前的formatter类也提供了更完善的方法来格式化,例如:
            formatter.format("Pi is   approximately %1$f," +
                      "and e is about %2$f", Math.PI, Math.E);
             
            
格式化元素的构成如下:
            %[argument_index$][flags][width][.precision]conversion
            其中:
            argument_index是一个正整数,说明了参数的位置,1为取第一个参数
            width表示输出的最小字母个数
            precision代表数字的小数位数
            conversion代表被格式化的参数的类型:
            f  float,
            t  time
            d  decimal
            o octal
            x  hexadecimal
            s  general
            c  a Unicode character
            
 
以下是个例子:
            package format;
             
               import java.util.Formatter;
             
               public class UsingFormatter   {
             
                 public static   void main(String[] args) {
                   if   (args.length != 1) {
                       System.err.println("usage: " +
                         "java format/UsingFormatter ");
                       System.exit(0);
                   }
                     String format = args[0];
             
                     StringBuilder stringBuilder = new StringBuilder();
                     Formatter formatter = new Formatter(stringBuilder);
                     formatter.format("Pi is approximately " + format +
                       ", and e is about " + format, Math.PI, Math.E);
                     System.out.println(stringBuilder);
                 }
               }
             
            //控制台调用
            java format/UsingFormatter %f
            //输出
            Pi is approximately 3.141593, and e is   about 2.718282
            //控制台调用
            java format/UsingFormatter %<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue=".2" negative="False" numbertype="1" unitname="F" w:st="on">.2f</st1:chmetcnv>
            //输出
            Pi is approximately 3.14, and e is about   2.72
            //控制台调用
            java format/UsingFormatter %<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="6.2" negative="False" numbertype="1" unitname="F" w:st="on">6.2f</st1:chmetcnv>
            //输出(有空格来填补长度)
            Pi is approximately   3.14, and   e is about   2.72
            //控制台调用
            java format/UsingFormatter  %1$<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue=".2" negative="False" numbertype="1" unitname="F" w:st="on">.2f</st1:chmetcnv>
            //输出
            Pi is approximately 3.14, and e is about   3.14
             
            //改变区域设置
            package format;
               import java.util.Formatter;
               import java.util.Locale;
               public class UsingFormatter   {
                 public static   void main(String[] args) {
                   if   (args.length != 1) {
                       System.err.println("usage: " +
                         "java format/UsingFormatter <format string>");
                       System.exit(0);
                   }
                     String format = args[0];
                     StringBuilder stringBuilder = new StringBuilder();
                     Formatter formatter = new Formatter(stringBuilder,
                                                 Locale.FRANCE);
                     formatter.format("Pi is approximately " + format +
                       ", and e is about " + format, Math.PI, Math.E);
                     System.out.println(stringBuilder);
                 }
               }
            //控制台调用
            java format/UsingFormatter %<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue=".2" negative="False" numbertype="1" unitname="F" w:st="on">.2f</st1:chmetcnv>
            //输出
            Pi is approximately 3,14, and e is about   2,72
             
            //采用format,printf的可替代写法
            package format;
             
               public class UsingSystemOut   {
             
                 public static   void main(String[] args) {
                   if   (args.length != 1) {
                       System.err.println("usage: " +
                         "java format/UsingSystemOut <format string>");
                       System.exit(0);
                   }
                     String format = args[0];
             
                     System.out.format("Pi is approximately " + format +
                       ", and e is approximately " + format, Math.PI, Math.E);
                 }
               }
            //控制台调用
            java format/UsingSystemOut %<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue=".2" negative="False" numbertype="1" unitname="F" w:st="on">.2f</st1:chmetcnv>%n
            //输出
            Pi is approximately 3.14
               , and e is about 2.72
             
            
 
对时间的格式化用字母t来代表,通常在t后面加上特殊的字符来显示时间的某个部分:
<!---->
<!---->
            tr  hour and minute,
            tA  the day of the week
            tB  the name of the month
            te  the number of the day of the   month
            tY  the year
            //eg.
            package format;
             
               import java.util.Calendar;
             
               public class   FormattingDates  {
             
                 public static   void main(String[] args) {
                     System.out.printf("Right now it is %tr on " +
                                       "%<tA, %<tB %<te, %<tY.%n",
                                       Calendar.getInstance());
                 }
               }
            //说明:“<”指示采用的参数为前一个被格式化的参数
            //输出
            Right now it is 01:55:19 PM on Wednesday,   September 22, 2004.
            
<div style=""><o:p> </o:p>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表