当有一个字符串有一部分是固定另外一部分是需要变化的时候,最好使用String.format()来处理这种情况。

格式为String.format(String format, Object ... args)

例如在www.xxx.com/s?index=后面需要添加参数时

String url = "www.xxx.com/s?index=%d"
String format = String.format(url,100)
System.out.println(format)

执行后即可得到结果www.xxx.com/s?index=100

如在字符串中有多个变化的部分的时候则可以使用以下方法:

例如需要显示距离过年还有xx天xx时xx秒

可以在string.xml中声明

<string name="delay_time">距离过年还有%1$d天%2$d时%3$d秒</string>

在代码中的使用:

mTextView.setText(String.format(getResources().getString(R.string.delay_time),mDay,mMinute,mSecond));

即使用%n$d这种格式来添加多个参数,其中n表示其在String.format()中在第几个参数$d则表示其位一个整数类型

常规类型的格式化

转换符 说明 实例
%s 字符串类型 “qwerty”
%c 字符类型 ‘w’
%b 布尔类型 true
%d 十进制整数 56
%x 十六进制整数 AF
%o 八进制整数 77
%f 浮点类型 12.34
%a 十六进制浮点 AF.21AE
%e 指数类型 9.38e+5
%g 通用浮点类型
%h 散列码
%% 百分比类型 %
%n 换行符
%tx 日期和事件类型(x表示不同的日期时间转换符)
示例代码
String str1=String.format("Hi,%s", "哈士奇");  
System.out.println(str1);
String str2=String.format("Hi,%s:%s.%s", "老鹰","是一种","鸟类");
System.out.println(str2);
System.out.printf("字母h的大写是:%c %n", 'H');
System.out.printf("12.34>33.22的结果是:%b %n", 12.34>33.22);
System.out.printf("100的一半是:%d %n", 100/2);
System.out.printf("100的16进制数是:%x %n", 100);
System.out.printf("100的8进制数是:%o %n", 100);
System.out.printf("100元的书包打8.5折扣是:%f 元%n", 100*0.85);
System.out.printf("100的16进制浮点数是:%a %n", 100*0.85);
System.out.printf("100的指数表示:%e %n", 100*0.85);
System.out.printf("10的指数和浮点数结果的长度较短的是:%g %n", 100*0.85);
System.out.printf("100的折扣是%d%% %n", 85);
System.out.printf("字母A的散列码是:%h %n", 'A');

代码输出结果如下:

Hi,哈士奇
Hi,老鹰:是一种.鸟类
字母h的大写是:H
12.34>33.22的结果是:false
100的一半是:50
10016进制数是:64
1008进制数是:144
100元的书包打8.5折扣是:85.000000
10016进制浮点数是:0x1.54p6
100的指数表示:8.500000e+01
10的指数和浮点数结果的长度较短的是:85.0000
100的折扣是85%
字母A的散列码是:41

日期和时间字符串格式化

转换符 说明 实例
c 包括全部时间和日期信息 星期四 六月 14:12:20 CST 2021
F “年-月-日”格式 2021-6-10
D ”月/日/年”格式 6/10/21
r “HH:MM:SS PM”格式(12小时制) 02:12:20 下午
T “HH:MM:SS”格式(24小时制) 14:12:20
R “HH:MM”格式(24小时制) 14:12
示例代码
Date date=new Date();                                  
//c的使用
System.out.printf("全部日期和时间信息:%tc%n",date);
//f的使用
System.out.printf("年-月-日格式:%tF%n",date);
//d的使用
System.out.printf("月/日/年格式:%tD%n",date);
//r的使用
System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
//t的使用
System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
//R的使用
System.out.printf("HH:MM格式(24时制):%tR",date);

代码输出结果为:

全部日期和时间信息:星期三 九月 19 13:47:42 CST 2018
年-月-日格式:2018-09-19
月/日/年格式:09/19/18
HH:MM:SS PM格式(12时制):01:47:42 下午
HH:MM:SS格式(24时制):13:47:42
HH:MM格式(24时制):13:47