zoukankan      html  css  js  c++  java
  • JAVA字符串格式化-String.format()的使用

    参考

    常规类型的格式化

    String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。

    format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。

    format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。

    显示不同转换符实现不同数据类型到字符串的转换,如图所示。

    转  换  符

    说    明 

    示    例

    %s

    字符串类型

    "mingrisoft"

    %c

    字符类型

    'm'

    %b

    布尔类型

    true

    %d

    整数类型(十进制)

    99

    %x

    整数类型(十六进制)

    FF

    %o

    整数类型(八进制)

    77

    %f

    浮点类型

    99.99

    %a

    十六进制浮点类型

    FF.35AE

    %e

    指数类型

    9.38e+5

    %g

    通用浮点类型(f和e类型中较短的)

     

    %h

    散列码

     

    %%

    百分比类型

    %n

    换行符

     

    %tx

    日期与时间类型(x代表不同的日期与时间转换符

     

    测试用例

    [java] view plain copy
     
    1. public static void main(String[] args) {  
    2.     String str=null;  
    3.     str=String.format("Hi,%s", "王力");  
    4.     System.out.println(str);  
    5.     str=String.format("Hi,%s:%s.%s", "王南","王力","王张");            
    6.     System.out.println(str);                           
    7.     System.out.printf("字母a的大写是:%c %n", 'A');  
    8.     System.out.printf("3>7的结果是:%b %n", 3>7);  
    9.     System.out.printf("100的一半是:%d %n", 100/2);  
    10.     System.out.printf("100的16进制数是:%x %n", 100);  
    11.     System.out.printf("100的8进制数是:%o %n", 100);  
    12.     System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85);  
    13.     System.out.printf("上面价格的16进制数是:%a %n", 50*0.85);  
    14.     System.out.printf("上面价格的指数表示:%e %n", 50*0.85);  
    15.     System.out.printf("上面价格的指数和浮点数结果的长度较短的是:%g %n", 50*0.85);  
    16.     System.out.printf("上面的折扣是%d%% %n", 85);  
    17.     System.out.printf("字母A的散列码是:%h %n", 'A');  
    18. }  

    输出结果

    [plain] view plain copy
     
    1. Hi,王力  
    2. Hi,王南:王力.王张  
    3. 字母a的大写是:A   
    4. 3>7的结果是:false   
    5. 100的一半是:50   
    6. 100的16进制数是:64   
    7. 100的8进制数是:144   
    8. 50元的书打8.5折扣是:42.500000 元  
    9. 上面价格的16进制数是:0x1.54p5   
    10. 上面价格的指数表示:4.250000e+01   
    11. 上面价格的指数和浮点数结果的长度较短的是:42.5000   
    12. 上面的折扣是85%   
    13. 字母A的散列码是:41   

    搭配转换符的标志,如图所示。

    标    志

    说    明

    示    例

    结    果

    +

    为正数或者负数添加符号

    ("%+d",15)

    +15

    左对齐

    ("%-5d",15)

    |15   |

    0

    数字前面补0

    ("%04d", 99)

    0099

    空格

    在整数之前添加指定数量的空格

    ("% 4d", 99)

    |  99|

    ,

    以“,”对数字分组

    ("%,f", 9999.99)

    9,999.990000

    (

    使用括号包含负数

    ("%(f", -99.99)

    (99.990000)

    #

    如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0

    ("%#x", 99)

    ("%#o", 99)

    0x63

    0143

    格式化前一个转换符所描述的参数

    ("%f和%<3.2f", 99.45)

    99.450000和99.45

    $

    被格式化的参数索引

    ("%1$d,%2$s", 99,"abc")

    99,abc

    测试用例

    [java] view plain copy
     
    1. public static void main(String[] args) {  
    2.     String str=null;  
    3.     //$使用  
    4.     str=String.format("格式参数$的使用:%1$d,%2$s", 99,"abc");             
    5.     System.out.println(str);                       
    6.     //+使用  
    7.     System.out.printf("显示正负数的符号:%+d与%d%n", 99,-99);  
    8.     //补O使用  
    9.     System.out.printf("最牛的编号是:%03d%n", 7);  
    10.     //空格使用  
    11.     System.out.printf("Tab键的效果是:% 8d%n", 7);  
    12.     //.使用  
    13.     System.out.printf("整数分组的效果是:%,d%n", 9989997);  
    14.     //空格和小数点后面个数  
    15.     System.out.printf("一本书的价格是:% 50.5f元%n", 49.8);  
    16. }  


    输出结果

    [plain] view plain copy
     
    1. 格式参数$的使用:99,abc  
    2. 显示正负数的符号:+99与-99  
    3. 最牛的编号是:007  
    4. Tab键的效果是:       7  
    5. 整数分组的效果是:9,989,997  
    6. 一本书的价格是:                                          49.80000元  


    日期和事件字符串格式化

    在程序界面中经常需要显示时间和日期,但是其显示的 格式经常不尽人意,需要编写大量的代码经过各种算法才得到理想的日期与时间格式。字符串格式中还有%tx转换符没有详细介绍,它是专门用来格式化日期和时 间的。%tx转换符中的x代表另外的处理日期和时间格式的转换符,它们的组合能够将日期和时间格式化成多种格式。

    常见日期和时间组合的格式,如图所示。

    转  换  符

    说    明

    示    例

    c

    包括全部日期和时间信息

    星期六 十月 27 14:21:20 CST 2007

    F

    “年-月-日”格式

    2007-10-27

    D

    “月/日/年”格式

    10/27/07

    r

    “HH:MM:SS PM”格式(12时制)

    02:25:51 下午

    T

    “HH:MM:SS”格式(24时制)

    14:28:16

    R

    “HH:MM”格式(24时制)

    14:28

    测试用例

    [java] view plain copy
     
    1. public static void main(String[] args) {  
    2.     Date date=new Date();                                  
    3.     //c的使用  
    4.     System.out.printf("全部日期和时间信息:%tc%n",date);          
    5.     //f的使用  
    6.     System.out.printf("年-月-日格式:%tF%n",date);  
    7.     //d的使用  
    8.     System.out.printf("月/日/年格式:%tD%n",date);  
    9.     //r的使用  
    10.     System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);  
    11.     //t的使用  
    12.     System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  
    13.     //R的使用  
    14.     System.out.printf("HH:MM格式(24时制):%tR",date);  
    15. }  


    输出结果

    [plain] view plain copy
     
    1. 全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012  
    2. 年-月-日格式:2012-09-10  
    3. 月/日/年格式:09/10/12  
    4. HH:MM:SS PM格式(12时制):10:43:36 上午  
    5. HH:MM:SS格式(24时制):10:43:36  
    6. HH:MM格式(24时制):10:43  

    定义日期格式的转换符可以使日期通过指定的转换符生成新字符串。这些日期转换符如图所示。

    [java] view plain copy
     
    1. public static void main(String[] args) {  
    2.     Date date=new Date();                                      
    3.     //b的使用,月份简称  
    4.     String str=String.format(Locale.US,"英文月份简称:%tb",date);       
    5.     System.out.println(str);                                                                              
    6.     System.out.printf("本地月份简称:%tb%n",date);  
    7.     //B的使用,月份全称  
    8.     str=String.format(Locale.US,"英文月份全称:%tB",date);  
    9.     System.out.println(str);  
    10.     System.out.printf("本地月份全称:%tB%n",date);  
    11.     //a的使用,星期简称  
    12.     str=String.format(Locale.US,"英文星期的简称:%ta",date);  
    13.     System.out.println(str);  
    14.     //A的使用,星期全称  
    15.     System.out.printf("本地星期的简称:%tA%n",date);  
    16.     //C的使用,年前两位  
    17.     System.out.printf("年的前两位数字(不足两位前面补0):%tC%n",date);  
    18.     //y的使用,年后两位  
    19.     System.out.printf("年的后两位数字(不足两位前面补0):%ty%n",date);  
    20.     //j的使用,一年的天数  
    21.     System.out.printf("一年中的天数(即年的第几天):%tj%n",date);  
    22.     //m的使用,月份  
    23.     System.out.printf("两位数字的月份(不足两位前面补0):%tm%n",date);  
    24.     //d的使用,日(二位,不够补零)  
    25.     System.out.printf("两位数字的日(不足两位前面补0):%td%n",date);  
    26.     //e的使用,日(一位不补零)  
    27.     System.out.printf("月份的日(前面不补0):%te",date);  
    28. }  

    输出结果

    [plain] view plain copy
     
    1. 英文月份简称:Sep  
    2. 本地月份简称:九月  
    3. 英文月份全称:September  
    4. 本地月份全称:九月  
    5. 英文星期的简称:Mon  
    6. 本地星期的简称:星期一  
    7. 年的前两位数字(不足两位前面补0):20  
    8. 年的后两位数字(不足两位前面补0):12  
    9. 一年中的天数(即年的第几天):254  
    10. 两位数字的月份(不足两位前面补0):09  
    11. 两位数字的日(不足两位前面补0):10  
    12. 月份的日(前面不补0):10  

    和日期格式转换符相比,时间格式的转换符要更多、更精确。它可以将时间格式化成时、分、秒甚至时毫秒等单位。格式化时间字符串的转换符如图所示。

    转  换  符

    说    明

    示    例

    H

    2位数字24时制的小时(不足2位前面补0)

    15

    I

    2位数字12时制的小时(不足2位前面补0)

    03

    k

    2位数字24时制的小时(前面不补0)

    15

    l

    2位数字12时制的小时(前面不补0)

    3

    M

    2位数字的分钟(不足2位前面补0)

    03

    S

    2位数字的秒(不足2位前面补0)

    09

    L

    3位数字的毫秒(不足3位前面补0)

    015

    N

    9位数字的毫秒数(不足9位前面补0)

    562000000

    p

    小写字母的上午或下午标记

    中:下午

    英:pm

    z

    相对于GMT的RFC822时区的偏移量

    +0800

    Z

    时区缩写字符串

    CST

    s

    1970-1-1 00:00:00 到现在所经过的秒数

    1193468128

    Q

    1970-1-1 00:00:00 到现在所经过的毫秒数

    1193468128984


    测试代码

    [java] view plain copy
     
    1. public static void main(String[] args) {  
    2.     Date date = new Date();  
    3.     //H的使用  
    4.     System.out.printf("2位数字24时制的小时(不足2位前面补0):%tH%n", date);  
    5.     //I的使用  
    6.     System.out.printf("2位数字12时制的小时(不足2位前面补0):%tI%n", date);  
    7.     //k的使用  
    8.     System.out.printf("2位数字24时制的小时(前面不补0):%tk%n", date);  
    9.     //l的使用  
    10.     System.out.printf("2位数字12时制的小时(前面不补0):%tl%n", date);  
    11.     //M的使用  
    12.     System.out.printf("2位数字的分钟(不足2位前面补0):%tM%n", date);  
    13.     //S的使用  
    14.     System.out.printf("2位数字的秒(不足2位前面补0):%tS%n", date);  
    15.     //L的使用  
    16.     System.out.printf("3位数字的毫秒(不足3位前面补0):%tL%n", date);  
    17.     //N的使用  
    18.     System.out.printf("9位数字的毫秒数(不足9位前面补0):%tN%n", date);  
    19.     //p的使用  
    20.     String str = String.format(Locale.US, "小写字母的上午或下午标记(英):%tp", date);  
    21.     System.out.println(str);   
    22.     System.out.printf("小写字母的上午或下午标记(中):%tp%n", date);  
    23.     //z的使用  
    24.     System.out.printf("相对于GMT的RFC822时区的偏移量:%tz%n", date);  
    25.     //Z的使用  
    26.     System.out.printf("时区缩写字符串:%tZ%n", date);  
    27.     //s的使用  
    28.     System.out.printf("1970-1-1 00:00:00 到现在所经过的秒数:%ts%n", date);  
    29.     //Q的使用  
    30.     System.out.printf("1970-1-1 00:00:00 到现在所经过的毫秒数:%tQ%n", date);  
    31. }  


    输出结果

    [plain] view plain copy
     
      1. 2位数字24时制的小时(不足2位前面补0):11  
      2. 2位数字12时制的小时(不足2位前面补0):11  
      3. 2位数字24时制的小时(前面不补0):11  
      4. 2位数字12时制的小时(前面不补0):11  
      5. 2位数字的分钟(不足2位前面补0):03  
      6. 2位数字的秒(不足2位前面补0):52  
      7. 3位数字的毫秒(不足3位前面补0):773  
      8. 9位数字的毫秒数(不足9位前面补0):773000000  
      9. 小写字母的上午或下午标记(英):am  
      10. 小写字母的上午或下午标记(中):上午  
      11. 相对于GMT的RFC822时区的偏移量:+0800  
      12. 时区缩写字符串:CST  
      13. 1970-1-1 00:00:00 到现在所经过的秒数:1347246232  
      14. 1970-1-1 00:00:00 到现在所经过的毫秒数:1347246232773  
  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/Dreamice/p/9072473.html
Copyright © 2011-2022 走看看