字符串格式化

来源:互联网 发布:办公软件的运用 编辑:程序博客网 时间:2024/06/09 16:23


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

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

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

语法如下:

str.format(Stringformat,Object…args)

þ  format:格式字符串。

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

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

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

þ  format:格式字符串。

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

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

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

þ  日期格式化

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

Datedate = new Date();                            //创建Date对象dateStrings = 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对象date05                 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对象date05                 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对象date05                 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进制前加一个009                 System.out.println("33的8进制结果是:" + str3);10                 String str4 =String.format("%#x", 33); // 在16进前加一个0x11                 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,不足长度在前端补021                 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上的社区进行发贴,把您的问题详细的说明一下,我们的技术人员会在那里给您回复!

原创粉丝点击