问题
在开发中一段字符串的中间某一部分需要可变的。如:文本要展示 “张三用户来自深圳,年龄 18,性别 男…”
其中的 张三 是用户名,每个用户都是不一样的;
地区 深圳 为可变的String数据;年龄 18 为可变的int数据;性别 男 为可变的String数据。
解决方式
使用 String.format
方法来解决。
public static void main(String[] args) {
String name = "张三";
String city = "深圳";
int age = 18;
String sex = "男";
String format = String.format("%s用户来自%s,年龄 %d,性别 %s.....", name, city, age, sex);
System.out.println(format);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
String.format()说明
1. String.format()字符串两个重载方法
- format(String format, Object… args):新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。
- format(Locale locale, String format, Object… args):使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。
2. 占位符类型
转换符 | 详细说明 | 示例 |
---|---|---|
%s | 字符串类型 | “值得点赞” |
%c | 字符类型 | ‘h’ |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 88 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 7.777 |
%a | 十六进制浮点类型 | FF.35AE |
%e | 指数类型 | 9.38e+5 |
%g | 通用浮点类型(f和e类型中较短的) | |
%h | 散列码 | |
%d% | 百分比类型 | |
%n | 换行符 | |
%tx | 日期与时间类型 |
示例说明
public static void main(String[] args) {
String str;
// %s
str = String.format("Hi,%s", "布鲁斯");
System.out.println(str);
// %c %n
str = String.format("字母c的大写是:%c %n", 'C');
System.out.println(str);
// %b
str = String.format("布尔结果是:%b", 3>2);
System.out.println(str);
// %d
str = String.format("100的一半是:%d", 100/2);
System.out.println(str);
// %x
str = String.format("100的16进制数是:%x", 100);
System.out.println(str);
// %o
str = String.format("100的8进制数是:%o", 100);
System.out.println(str);
// %f
str = String.format("50元的书打8.5折扣是:%f 元", 50 * 0.85);
System.out.println(str);
// %a
str = String.format("上面价格的16进制数是:%a", 50 * 0.85);
System.out.println(str);
// %e
str = String.format("上面价格的指数表示:%e", 50 * 0.85);
System.out.println(str);
// %g
str = String.format("上面价格的指数和浮点数结果的长度较短的是:%g", 50 * 0.85);
System.out.println(str);
// %d%
str = String.format("上面的折扣是:%d%%", 85);
System.out.println(str);
// %h
str = String.format("字母A的散列码是:%h",'A');
System.out.println(str);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
输出结果
3. 常用标识
标识 | 说明 |
---|---|
+ | 为正数或负数添加符号 |
0 | 在数字位数不够的地方补上0 |
空格 | 在位数不够的地方补上空格 |
, | 对数字分组,三位一隔,只可以用于十进制 |
( | 使用括号将去掉负号的负数包含进来 |
# | 让十六进制的数字加上OX,八进制的数字加上o; 辅助%x和%o的使用,相当于一种对数字进制的补充说明提示 |
< | 格式化前一个转换符锁描述的参数 |
- | 左对齐,不够位数的地方补上空格 |
示例说明
public static void main(String[] args) {
// +
String str;
str = String.format("数字的正负表示:%+d %d %+d %d",8,8,-8,-8);
System.out.println(str);
// -
str = String.format("左对齐:%-6d",8);
System.out.println(str);
// 0
str = String.format("缺位补零:%06d",8);
System.out.println(str);
// 空格
str = String.format("缺位补空格:% 6d",8);
System.out.println(str);
str = String.format("缺位补空格:% 6d",-8);
System.out.println(str);
// ,
str = String.format("数字分组:%,d",123456789);
System.out.println(str);
// (
str = String.format("括号用法:%(d",-8888);
System.out.println(str);
str = String.format("括号用法:%(d",8888);
System.out.println(str);
// #
str = String.format("#括号用法(十六进制):%#x",12);
System.out.println(str);
str = String.format("#括号用法(八进制):%#o",12);
System.out.println(str);
// <
str = String.format("<括号用法:%f %<3.1f",3.14,3.2);
// "%<3.1f"作用的对象是前一个"%f"所作用的对象
System.out.println(str);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
输出结果
4. 日期转换符
标志 | 说明 |
---|---|
c | 包括全部日期和时间信息 |
F | "年-月-日"格式 |
D | '月/日/年’格式 |
r | “HH:MM:SS PM”格式(12时制) |
T | “HH:MM:SS”格式(24时制) |
R | “HH:MM”格式(24时制) |
示例说明
public static void main(String[] args) {
String str;
// c
str = String.format("全部日期和时间信息:%tc",new Date());
System.out.println(str);
// F
str = String.format("年-月-日格式:%tF",new Date());
System.out.println(str);
//D
str = String.format("月/日/年格式:%tD",new Date());
System.out.println(str);
//r
str = String.format("HH:MM:SS PM格式(12时制):%tr",new Date());
System.out.println(str);
//T
str = String.format("HH:MM:SS格式(24时制):%tT",new Date());
System.out.println(str);
//R
str = String.format("HH:MM格式(24时制):%tR",new Date());
System.out.println(str);
// %.2f保留两位小数
str = String.format("3.14保留两位小数:%.2f",3.141);
System.out.println(str);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24