• 字符串格式化


     

    String类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式。

    (1)format(String format,Object…args)

    该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。

    语法如下:

    str.format(String format,Object…args)

    þ   format:格式字符串。

    þ   args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。

    (2)format(Local l,String format,Object…args)

    þ   l:格式化过程中要应用的语言环境。如果l为null,则不进行本地化。

    þ   format:格式字符串。

    þ   args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。

    1. 日期和时间字符串格式化

    在应用程序设计中,经常需要显示时间和日期。如果想输出满意的日期和时间格式,一般需要编写大量的代码经过各种算法才能实现。format()方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。

    þ   日期格式化

    先来看下面的例子,返回一个月中的天数,实例代码如下:

    Date date = new Date();                            //创建Date对象date
    
    String s = String.format("%te", date);          //通过format()方法对date进行格式化

    上述代码中变量s的值是当前日期中的天数,如今天是15号,则s的值为15;%te是转换符。常用的日期格式化转换符如表5.1所示。

    说明:java.util.Date是Java中的时间日期类,这个类表示特定的瞬间,精确到毫秒。默认获取当前的时间。

    表5.1  常用的日期格式化转换符

    转换符

    说明

    示例

    %te

    一个月中的某一天(1~31)

    2

    %tb

    指定语言环境的月份简称

    Feb(英文)、二月(中文)

    %tB

    指定语言环境的月份全称

    February(英文)、二月(中文)

    %tA

    指定语言环境的星期几全称

    Monday(英文)、星期一(中文)

    %ta

    指定语言环境的星期几简称

    Mon(英文)、星期一(中文)

    %tc

    包括全部日期和时间信息

    星期二三月 25 13:37:22 CST 2008

    %tY

    4位年份

    2008

    %tj

    一年中的第几天(001~366)

    085

    %tm

    月份

    03

    %td

    一个月中的第几天(01~31)

    02

    %ty

    2位年份

    08

     

    【例】在项目中创建类Eval,实现将当前日期信息以4位年份、月份全称、2位日期形式输出。 

    01          import java.util.Date;                                    //导入java.util.Date类
    
    02          publicclass Eval {                                             //新建类
    
    03          publicstaticvoid main(String[] args) {        //主方法
    
    04                  Date date = new Date();                             //创建Date对象date
    
    05                  String year = String.format("%tY", date);    //将date进行格式化
    
    06                  String month = String.format("%tB", date);
    
    07                  String day = String.format("%td", date);
    
    08                  System.out.println("今年是:" + year + "年"); //输出信息
    
    09                  System.out.println("现在是:" + month);
    
    10                  System.out.println("今天是:" + day + "号");
    
    11              }
    
    12          }

    运行结果如图5.36所示。

     

     图5.36获取指定的日期信息

    þ   时间格式化

    使用format()方法不仅可以完成日期的格式化,也可以实现时间的格式化。时间格式化转换符要比日期转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒。格式化时间的转换符如表5.2所示。

    表5.2  时间格式化转换符

    转换符

    说明

    示例

    %tH

    2位数字的24时制的小时(00~23)

    14

    %tI

    2位数字的12时制的小时(01~12)

    05

    %tk

    1~2位数字的24时制的小时(0~23)

    5

    %tl

    1~2位数字的12时制的小时(1~12)

    10

    %tM

    2位数字的分钟(00~59)

    05

    %tS

    2位数字的秒数(00~60)

    12

    %tL

    3位数字的毫秒数(000~999)

    920

    %tN

    9位数字的微秒数(000000000~999999999)

    062000000

    %tp

    指定语言环境下上午或下午标记

    下午(中文)、pm(英文)

    %tz

    相对于GMT RFC 82 格式的数字时区偏移量

    +0800

    %tZ

    时区缩写形式的字符串

    CST

    %ts

    1970-01-01 00:00:00至现在经过的秒数

    1206426646

    %tQ

    1970-01-01 00:00:00至现在经过的毫秒数

    1206426737453

     

    【例】在项目中创建类GetDate,实现将当前时间信息以2位小时数、2位分钟数、2位秒数形式输出。

     

    01          import java.util.Date;                                   //导入java.util.Date类
    
    02          publicclass GetDate {                                   //新建类
    
    03          publicstaticvoid main(String[] args) {         //主方法
    
    04                  Date date = new Date();                            //创建Date对象date
    
    05                  String hour = String.format("%tH", date);    //将date进行格式化
    
    06                  String minute = String.format("%tM", date);
    
    07                  String second = String.format("%tS", date);
    
    08          //输出的信息
    
    09                  System.out.println("现在是:" + hour + "时" + minute + "分"
    
    10                          + second + "秒");
    
    11              }
    
    12          }

    运行结果如图5.37所示。

     

     图5.37获取当前时间

    þ   格式化常见的日期时间组合

    格式化日期与时间的转换符定义了各种日期时间组合的格式,其中最常用的日期和时间的组合格式如表5.3所示。

    表5.3  常见的日期和时间组合的格式

    转换符

    说明

    示例

    %tF

    “年-月-日”格式(4位年份)

    2008-03-25

    %tD

    “月/日/年”格式(2位年份)

    03/25/08

    %tc

    全部日期和时间信息

    星期二三月 25 15:20:00 CST 2008

    %tr

    “时:分:秒 PM(AM)”格式(12时制)

    03:22:06 下午

    %tT

    “时:分:秒”格式(24时制)

    15:23:50

    %tR

    “时:分”格式(24时制)

    15:25

    【例】在项目中创建类DateAndTime,在主方法中实现将当前日期时间的全部信息以指定格式的日期输出。

     

    01          import java.util.Date;                                     //导入java.util.Date类
    
    02          publicclass DateAndTime {                                      //创建类
    
    03          publicstaticvoid main(String[] args) {        //主方法
    
    04                  Date date = new Date();                              //创建Date对象date
    
    05                  String time = String.format("%tc", date);       //将date格式化
    
    06                  String form = String.format("%tF", date);
    
    07          //将格式化后的日期时间输出
    
    08                  System.out.println("全部的时间信息是:" + time);
    
    09                  System.out.println("年-月-日格式:" + form);
    
    10              }
    
    11          }

     

    运行结果如图5.38所示。

     

    图5.38将当前日期时间的全部信息以指定格式的日期输出

    2.  常规类型格式化

    常规类型的格式转化可应用于任何参数类型,可以通过表5.4所示的转换符来实现。

    表5.4转换符

    转换符

    说明

    示例

    %b、%B

    结果被格式化为布尔类型

    true

    %h、%H

    结果被格式化为散列码

    A05A5198

    %s、%S

    结果被格式化为字符串类型

    “abcd”

    %c、%C

    结果被格式化为字符类型

    ‘a’

    %d

    结果被格式化为十进制整数

    40

    %o

    结果被格式化为八进制整数

    11

    %x、%X

    结果被格式化为十六进制整数

    4b1

    %e

    结果被格式化为用计算机科学记数法表示的十进制数

    1.700000e+01

    %a

    结果被格式化为带有效位数和指数的十六进制浮点值

    0X1.C000000000001P4

    %n

    结果为特定于平台的行分隔符

     

    %%

    结果为字面值‘%’

    %

    【例】实现不同类型的格式转化。

    01          publicclass StringFormat {
    
    02          publicstaticvoid main(String[] args) {
    
    03                  String str1 = String.format("%c", 'X'); // 输出字符
    
    04                  System.out.println("字母x大写:" + str1);
    
    05                  String str2 = String.format("%d", 1251 + 3950); // 输出数字
    
    06                  System.out.println("1251+3950的结果是:" + str2);
    
    07                  String str3 = String.format("%.2f", Math.PI); // 输出小数点后两位
    
    08                  System.out.println("π取两位小数点:" + str3);
    
    09                  String str4 = String.format("%b", 2 < 3); // 输出布尔值
    
    10                  System.out.println("2<3的结果是:" + str4);
    
    11          // 输出哈希散列码,等同Integer.toHexString(3510);
    
    12                  String str5 = String.format("%h", 3510);
    
    13                  System.out.println("3510的hashCode值:" + str5);
    
    14                  String str6 = String.format("%o", 33); // 输出8进制
    
    15                  System.out.println("33的8进制结果是:" + str6);
    
    16                  String str7 = String.format("%x", 33); // 输出16进制
    
    17                  System.out.println("33的16进制结果是:" + str7);
    
    18                  String str8 = String.format("%e", 120000.1); // 输出科学计数法
    
    19                  System.out.println("120000.1用科学计数法表示:" + str8);
    
    20          // 输出带有效位数和指数的16进制浮点值
    
    21                  String str9 = String.format("%a", 40.0);
    
    22                  System.out.println("40.0的十六进制浮点值:" + str9);
    
    23          // 输出百分号和数字
    
    24                  System.out.println(String.format("天才是由%d%%的灵感,%d%%的汗水。", 1, 99));
    
    25              }
    
    26          }

    运行结果如图5.39所示。

     

    图5.39不同类型数字的格式化

    使用转换符,还可以配合转换符标识来控制输出的格式,如表5.5所示。

    表5.5转换符标识

    标识

    说明

    ‘-‘

    在最小宽度内左对其,不可以与’0’填充标识同时使用

    ‘#’

    用于8进制和16进制格式,在8进制前加一个0,在16进前加一个0x

    ‘+’

    显示数字的正负号

    ‘’

    在正数前加空格,在负数前加负号

    ‘0’

    在不够最小位数的结果前用0填充

    ‘,’

    只适用于10进制,每三位数字用‘,’分隔

    ‘(’

    用括号把负数括起来

    【例】使用标识控制字符串的输出格式。

    01          publicclass StringFormat2 {
    
    02          publicstaticvoid main(String[] args) {
    
    03                   // 让字符串输出的最大长度为5,不足长度在前端补空格
    
    04                  String str1 = String.format("%5d", 123);
    
    05                  System.out.println("输出长度为5的字符串|" + str1 + "|");
    
    06                  String str2 = String.format("%-5d", 123); // 让字符串左对齐
    
    07                  System.out.println("左对齐|" + str2 + "|");
    
    08                  String str3 = String.format("%#o", 33); // 在8进制前加一个0
    
    09                  System.out.println("33的8进制结果是:" + str3);
    
    10                  String str4 = String.format("%#x", 33); // 在16进前加一个0x
    
    11                  System.out.println("33的16进制结果是:" + str4);
    
    12                  String str5 = String.format("%+d", 1); // 显示数字正负号
    
    13                  System.out.println("我是正数:" + str5);
    
    14                  String str6 = String.format("%+d", -1); // 显示数字正负号
    
    15                  System.out.println("我是负数:" + str6);
    
    16                  String str7 = String.format("% d", 1); // 在正数前补一个空格
    
    17                  System.out.println("我是正数,前面有空格" + str7);
    
    18                  String str8 = String.format("% d", -1); // 在负数前补一个负号
    
    19                  System.out.println("我是负数,前面有负号" + str8);
    
    20                   // 让字符串输出的最大长度为5,不足长度在前端补0
    
    21                  String str9 = String.format("%05d", 12);
    
    22                  System.out.println("前面不够的数用0填充:" + str9);
    
    23                  String str10 = String.format("%,d", 123456789); // 用逗号分隔数字
    
    24                  System.out.println("用逗号分隔:" + str10);
    
    25                  String str11 = String.format("%(d", 13); // 正数无影响
    
    26                  System.out.println("我是正数,我没有括号:" + str11);
    
    27                  String str12 = String.format("%(d", -13); // 让负数用括号括起来
    
    28                  System.out.println("我是负数,我有括号的:" + str12);
    
    29              }
    
    30          }

    运行结果如图5.40所示。

     

    图5.40使用标识控制字符串的输出格式

     

    本文摘自明日科技出版的《Java从入门到精通(项目案例版)》,转载请注明出处!!!

     感谢读者朋友对明日科技的支持,如果您对图书中的讲解及光盘源码有任何问题,可以直接登录http://www.mingrisoft.com上的社区进行发贴,把您的问题详细的说明一下,我们的技术人员会在那里给您回复!

     

  • 相关阅读:
    Node.js基础学习一之Get请求
    Node.js学习准备篇
    如何在eclipse添加SVN菜单
    Java泛型的好处
    mybatis多数据源配置
    Python map() 函数
    python split()使用方法
    pythom os 模块
    深浅copy
    小数据池
  • 原文地址:https://www.cnblogs.com/mrxy/p/8041836.html
Copyright © 2020-2023  润新知