学而实习之 不亦乐乎

Java字符串格式化

2024-01-25 20:24:37

本文主要讨论String.format()的使用,format() 有多个重载。

一、转换符

类似于C语言中的scanf()和printf()函数,String.format()函数也用到了转换符,如下表:

转换符    说明     示例
%s    字符串类型    "mystring"
%c    字符类型    'm'
%b    布尔类型    TRUE
%d    整数类型(十进制)    99
%x    整数类型(十六进制)    FF
%o    整数类型(八进制)    77
%f    浮点类型    99.99
%a    十六进制浮点类型    FF.35AE
%e    指数类型    9.38E+05
%g    通用浮点类型(f和e类型中较短的)    
%h    散列码    
%%    百分比类型    %
%n    换行符    
%tx    日期与时间类型(x代表不同的日期与时间转换符    

1.标志,搭配转换符使用

标志    说明    示例    结果
+    为正数或者负数添加符号    ("%+d",15)    15
-    左对齐    ("%-5d",15)    |15  |
0    数字前面补0    ("%04d", 99)    99
空格    在整数之前添加指定数量的空格    ("% 4d", 99)    |  99|
,    以“,”对数字分组    ("%,f", 9999.99)    9,999.99
(    使用括号包含负数    ("%(f", -99.99)    -99.99
#    如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0    ("%#x", 99)    ("%#o", 99)
<     格式化前一个转换符所描述的参数    ("%f和%<3.2f", 99.45)    99.450000和99.45
$    被格式化的参数索引    ("%1$d,%2$s", 99,"abc")    99,abc

2.日期字符串格式化转换符

以下转换符搭配表1中的%t使用。
转换符    说明    示例
c    包括全部日期和时间信息    星期六 十月 27 14:21:20 CST 2007
F    “年-月-日”格式    2007/10/27
D    “月/日/年”格式    10/27/07
r    “HH:MM:SS PM”格式(12时制)    2:25:51 PM
T    “HH:MM:SS”格式(24时制)    14:28:16
R    “HH:MM”格式(24时制)    14:28

3.时间字符串格式转换符

转换符    说明    示例
H    2位数字24时制的小时(不足2位前面补0)    15
I    2位数字12时制的小时(不足2位前面补0)    3
k    2位数字24时制的小时(前面不补0)    15
l    2位数字12时制的小时(前面不补0)    3
M    2位数字的分钟(不足2位前面补0)    3
S    2位数字的秒(不足2位前面补0)    9
L    3位数字的毫秒(不足3位前面补0)    15
N    9位数字的毫秒数(不足9位前面补0)    562000000
p    小写字母的上午或下午标记    中:下午/英:pm        
z    相对于GMT的RFC822时区的偏移量    800
Z    时区缩写字符串    CST
s    1970-1-1 00:00:00 到现在所经过的秒数    1193468128
Q    1970-1-1 00:00:00 到现在所经过的毫秒数    1.19347E+12

二、实例

2.1 

public static void main(String[] args) { 
  String str=null; 
  str=Stringformat("Hi,%s", "王力"); 
  Systemoutprintln(str); 
  str=Stringformat("Hi,%s:%s%s", "王南","王力","王张");      
  Systemoutprintln(str);              
  Systemoutprintf("字母a的大写是:%c %n", 'A'); 
  Systemoutprintf("3>7的结果是:%b %n", 3>7); 
  Systemoutprintf("100的一半是:%d %n", 100/2); 
  Systemoutprintf("100的16进制数是:%x %n", 100); 
  Systemoutprintf("100的8进制数是:%o %n", 100); 
  Systemoutprintf("50元的书打5折扣是:%f 元%n", 50*85); 
  Systemoutprintf("上面价格的16进制数是:%a %n", 50*85); 
  Systemoutprintf("上面价格的指数表示:%e %n", 50*85); 
  Systemoutprintf("上面价格的指数和浮点数结果的长度较短的是:%g %n", 50*85); 
  Systemoutprintf("上面的折扣是%d%% %n", 85); 
  Systemoutprintf("字母A的散列码是:%h %n", 'A'); 
}

2.2

public static void main(String[] args) {
  String str=null; 
  //$使用 
  str=Stringformat("格式参数$的使用:%1$d,%2$s", 99,"abc");       
  Systemoutprintln(str);            
  //+使用 
  Systemoutprintf("显示正负数的符号:%+d与%d%n", 99,-99); 
  //补O使用 
  Systemoutprintf("最牛的编号是:%03d%n", 7); 
  //空格使用 
  Systemoutprintf("Tab键的效果是:% 8d%n", 7); 
  //使用 
  Systemoutprintf("整数分组的效果是:%,d%n", 9989997); 
  //空格和小数点后面个数 
  Systemoutprintf("一本书的价格是:% 5f元%n", 8); 
}

2.3

public static void main(String[] args) { 
  Date date=new Date();                 
  //c的使用 
  Systemoutprintf("全部日期和时间信息:%tc%n",date);     
  //f的使用 
  Systemoutprintf("年-月-日格式:%tF%n",date); 
  //d的使用 
  Systemoutprintf("月/日/年格式:%tD%n",date); 
  //r的使用 
  Systemoutprintf("HH:MM:SS PM格式(12时制):%tr%n",date); 
  //t的使用 
  Systemoutprintf("HH:MM:SS格式(24时制):%tT%n",date); 
  //R的使用 
  Systemoutprintf("HH:MM格式(24时制):%tR",date); 
}

2.4

public static void main(String[] args) { 
  Date date = new Date(); 
  //H的使用 
  Systemoutprintf("2位数字24时制的小时(不足2位前面补0):%tH%n", date); 
  //I的使用 
  Systemoutprintf("2位数字12时制的小时(不足2位前面补0):%tI%n", date); 
  //k的使用 
  Systemoutprintf("2位数字24时制的小时(前面不补0):%tk%n", date); 
  //l的使用 
  Systemoutprintf("2位数字12时制的小时(前面不补0):%tl%n", date); 
  //M的使用 
  Systemoutprintf("2位数字的分钟(不足2位前面补0):%tM%n", date); 
  //S的使用 
  Systemoutprintf("2位数字的秒(不足2位前面补0):%tS%n", date); 
  //L的使用 
  Systemoutprintf("3位数字的毫秒(不足3位前面补0):%tL%n", date); 
  //N的使用 
  Systemoutprintf("9位数字的毫秒数(不足9位前面补0):%tN%n", date); 
  //p的使用 
  String str = Stringformat(LocaleUS, "小写字母的上午或下午标记(英):%tp", date); 
  Systemoutprintln(str);  
  Systemoutprintf("小写字母的上午或下午标记(中):%tp%n", date); 
  //z的使用 
  Systemoutprintf("相对于GMT的RFC822时区的偏移量:%tz%n", date); 
  //Z的使用 
  Systemoutprintf("时区缩写字符串:%tZ%n", date); 
  //s的使用 
  Systemoutprintf("1970-1-1 00:00:00 到现在所经过的秒数:%ts%n", date); 
  //Q的使用 
  Systemoutprintf("1970-1-1 00:00:00 到现在所经过的毫秒数:%tQ%n", date); 
}