`

Java 的格式化输出

 
阅读更多
package io;

import java.util.GregorianCalendar;
import java.util.TimeZone;
/**
 * Java 的格式化输出
 * Java 的格式化输出一般用于下面几种情况
 * (1)String.format(String formatter,agr...)
 * (2)System.out.printf(String formatter,agr...) 
 * (3)PrintWriter.printf(String formatter,agr...) 
 * 上面三种典型用法中,都是根据一个字符串格式的formatter和一个参数列表,获得一个格式化的字符串.
 * 其功能类似于c语言中的pringf函数.
 * 参数formatter有固定的语法,主要语法有下面三种:
 * 
 * (1)常规类型、字符类型和数值类型的格式说明符的语法如下: 
 * 
 * %[argument_index$][flags][width][.precision]conversion
 * 
 * %: 这个是参数转换格式化串的起点
 * argument_index$: 由argument_index和$构成,表示使用后面参数列表中第argument_index参数来获取格式化字符
 * flags: 是一些标志,比如 - 可以将参数左对齐,这个根据后面参数的具体类型有不同的标志可选用
 * width: 表示将后面参数格式化后的宽度,比如宽度为3,并使用-作为flag后,格式化整数5后,得到的字符串为"5  ",即5后面加2空格
 * .precision: 表示精度,这个一般针对浮点数,比如3.1415929 使用"%.2f"格式化之后得到3.14
 * conversion:是格式化规则,比如上面的"%.2f"中的f就是一个规则,f只能对应浮点型参数,否则会抛异常
 * conversion也是参数格式化串的终点
 * 
 * 上面format(String formatter,agr...)中的formatter可以包含很多的参数格式化串,
 * 也可以包含非格式化串,这些非格式化串字符将按照原样输出.
 * 
 * 比如调用format("小明今年 %2$-3d岁,生于 %1$-5d年.",1994,20)
 * 得到的格式化之后的字符串为:小明今年 20 岁,生于 1994 年.
 * 注意,上面的formatter中包含两个格式化串:%2$-3d 和 %1$-5d,都是以%开头,d(conversion)结尾的.
 * 其他部分,是非格式化串字符,比如"小明今年 "则按原样输出.
 * %2$-3d中的2$表示使用后面的第二个参数,也就是20.注意这里20是2个宽度,而-3表示格式化成3个宽度并且左对齐,
 * 这样得到的输出就是"20 岁",20和岁之间加了一个空格,以是的20格式化之后的宽度变成3.
 * 
 * (2)用来表示日期和时间类型的格式说明符的语法如下: 
 * 
 *  %[argument_index$][flags][width]conversion
 *  
 *  这个跟上面的有两点区别:首先,格式化时间不需要[.precision]这个了;
 *  其次,格式化时间的conversion 有特殊要求,即,必须要在前面加一个t或T.
 *  有一些专门的conversion用于格式化时间,使用这些conversion时,需要在前面加一个t
 *  
 *  比如,
 *  Calendar c = new GregorianCalendar(1984, 6, 4);
 *  String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
 *  这里%1$tm中的m是conversion,表示输出两位数月份,t是前缀.
 *  格式化之后得到:Duke's Birthday: 07 4,1984
 *  
 *  (3)与参数不对应的格式说明符的语法如下: 
 *  
 *  %[flags][width]conversion
 *  
 *  这个与前面(1)的区别是去掉了[argument_index$]和[.precision]表示:
 *  首先,不能指定参数位置与格式化串的对应关系,则使用格式化串的位置寻找后面对应位置的参数
 *  format("小明今年 %-3d岁,生于 %-5d年.",1994,20)
 *  上面的格式化串%-3d位置为1,则使用第一个参数1994来获取格式化串,
 *  最终返回"小明今年 1994岁,生于 20   年." 这样就不对了.
 *  所以,后面的参数位置要和前面的格式化串对应.改成:
 *  format("小明今年 %-3d岁,生于 %-5d年.",20,1994)
 *  
 *
 */

public class TestStringFormat
{
  public static void main(String[] args)
  {
    //格式化输出整数
    String str1 = String.format("小明今年 %2$-3d岁,生于 %1$-5d年.",1994,20);
    System.out.println(str1);
    //输出:小明今年 20 岁,生于 1994 年.
    
    //没有参数对应时,要让格式化串和参数的顺序对应好
    str1 = String.format("小明今年 %-3d岁,生于 %-5d年.",20,1994,20);
    System.out.println(str1);
    //输出:小明今年 20 岁,生于 1994 年.
    
    //没有参数对应时,参数数量少于格式化串数量时,格式化串变成空,
    //参数多了则没关系(参考上面的20,1994,20三个参数只用到了两个)
    
    //有参数对应时,如果用3$指定了第三个参数,而参数列表中只有2个参数则会报错
    //str1 = String.format("小明今年 %2$-3d岁,生于 %1$-5d年.",1994);//这样的报错
    
    //格式化日期,时间
    GregorianCalendar c = new GregorianCalendar(1984, 6, 4,12,22,33);//构造制定日期时间的日历
    c.setTimeZone(TimeZone.getTimeZone("GMT+8"));
    c.setTimeInMillis(System.currentTimeMillis());//设置为当前日期时间
    
    str1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
    System.out.println(str1);//输出:Duke's Birthday: 02 27,2014
    
    str1 = String.format("Time: %1$tH:%1$tM:%1$tS",c);
    System.out.println(str1);//输出: Time: 20:19:09
    
    //格式化浮点数,如果浮点数格式化后小数位数小于原来的值,则是按照四舍五入方式 舍弃的
    str1 = String.format("π值为 %1$s,浮点数为:%1$f,精确到3位小数为:%1$.3f", 3.1415926);
    System.out.println(str1);//输出:π值为 3.1415926,浮点数为:3.141593,精确到3位小数为:3.142
    
    //格式化输出数组,左对齐,每个整数占5个宽度
    int[][] dataArr = {{1,2,3},{4,5,6}};
    for(int i=0;i<2;i++)
    {
      for(int j=0;j<3;j++)
      {
        System.out.printf("%-5d",dataArr[i][j]);
      }
      System.out.println("");
    }
    /*
     * 输出:
     * 1    2    3    
     * 4    5    6    
     */
  }
}

 

分享到:
评论

相关推荐

    Java 格式化输出 printf 例子.zip_moneytzb

    在Java编程语言中,`printf`方法是`PrintStream`类的一个重要成员,它提供了类似于C语言中的格式化输出功能。这个方法允许我们以灵活的方式控制输出内容的格式,包括精度、宽度、对齐方式等。`moneytzb`可能是指特定...

    Java格式化输出.txt

    Java格式化输出.txt

    java 格式化输出数字的方法

    在Java编程中,格式化输出数字是一项常见的任务,特别是在数据展示和报表生成中。`java.text.DecimalFormat` 类是Java提供的一个强大工具,用于精确控制数字的显示方式。以下是对标题和描述中所述知识点的详细解释:...

    Java格式化输出 format介绍

    char n='150cm'; System.out.format("身高:%s", n); 举个例子 只要在双引号填加自己想说的话就好了 逗号后用来输出变量 占位符 说明 %d 格式化输出整数 %f 格式化输出浮点数 ...%s 格式化输出字符串

    Java格式化Xml文件

    总结来说,Java格式化XML文件涉及的主要知识点有:XML解析器的使用,如`DocumentBuilderFactory`和`DocumentBuilder`;`TransformerFactory`和`Transformer`用于XML的转换,包括设置输出属性;以及`Source`和`Result...

    Java Sql 格式化工具

    对于独立使用,可以直接通过命令行运行jar包,比如使用`java -jar SQLinForm.jar &lt;input_sql_file&gt; &lt;output_sql_file&gt;`,其中`&lt;input_sql_file&gt;`是包含原始SQL的文件,`&lt;output_sql_file&gt;`则是格式化后SQL的输出文件...

    java组件开发(14) 格式化输出

    java组件开发(14) 格式化输出

    浅谈Java中格式化输出

    Java格式化输出 Java中格式化输出是指使用格式化字符串和参数列表来输出想要的结果。Java中提供了多种方式来实现格式化输出,如System.out.printf()方法、String.format()方法、java.util.Formatter类等。 格式化...

    Java字符串 日期 数字格式化输出-.doc

    Java 字符串日期数字格式化输出 Java 中的字符串日期数字格式化输出是一种常见的操作,特别是在数据输出和显示时。 Java 提供了多种方式来实现格式化输出,包括使用 NumberFormat、DecimalFormat 和 ...

    SQL格式化功能(JAVA代码)

    在给定的标题“SQL格式化功能(JAVA代码)”中,我们聚焦于一个特定的Java实现,它从Hibernate库中抽取了用于SQL格式化的功能,并且不依赖任何第三方jar包。 `Hibernate`是一个流行的Java ORM(对象关系映射)框架...

    JAVA格式输出,JAVA格式输出

    在Java编程语言中,控制输出...总结来说,`NumberFormat`和`java.math`包的`BigInteger`、`BigDecimal`类是Java中处理格式化输出和高精度计算的关键工具。它们提供了丰富的功能,确保了在各种场景下的灵活性和精度。

    java常规类型的输出格式化

    java常规类型的格式化.doc ) 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    java中数字格式化输出

    将浮点型数用美元符号和货币符号输出,用格式化的方式。还包括浮点型数据相除时,格式化输出结果。

    Java打印漂亮的SQL语句(被格式化的SQL语句)

    "标签"进一步强调了这个工具的关键特性,包括"Java输出漂亮的SQL语句",这意味着它是一个Java环境下的解决方案,能够集成到Java项目中,通过Java代码来调用和实现SQL语句的格式化。另一个标签"SQL格式化"则明确了它...

    java中时间格式化输出

    当前的系统时间的格式化输出,包括中国时间和美国时间,并且是按照不同的两种方式输出的.

    java日期格式化

    Java日期格式化是Java开发中常见的一项任务,它涉及到日期和时间的处理,尤其是在数据输入输出、用户界面显示以及数据库交互等场景。Java提供了一系列的类来帮助我们完成日期和时间的格式化工作,其中最常用的包括`...

    Java字符串 日期 数字格式化输出.doc

    Java编程语言中,字符串、日期和数字的格式化输出是一个重要的概念,特别是在处理用户界面输出或者数据记录时。虽然在C语言中可以使用`printf`函数进行格式化输出,但Java的标准输出`System.out.println()`并没有...

    谷歌java格式-重新格式化 Java 源代码以符合 Google Java 风格

    格式化程序可以作用于整个文件、有限行 ( --lines)、特定偏移量 ( --offset)、传递到标准输出(默认)或就地更改 ( --replace)。 要重新格式化特定补丁中更改的行,请使用 google-java-format-diff.py. 注意: ...

    java 代码格式化工具 使用sun标准格式

    3. 如果一切顺利, Jacobe 会按照Sun标准格式重新格式化`your_file.java`,并覆盖原文件,或者你可以选择输出到新的文件。 在实际开发中,为了保证代码风格的一致性,许多开发团队会在版本控制系统(如Git)的pre-...

    java训前考试

    1. **Java格式化输出**: 题目中的第一题涉及到了Java的格式化输出。`System.out.printf`方法用于格式化输出,其中`%7.3f`表示保留小数点后三位,总宽度为7的浮点数。因此,正确答案是`System.out.printf("|%7.3f| ...

Global site tag (gtag.js) - Google Analytics