在开发中一段字符串的中间某一部分需要可变的。如:文本要展示 “张三用户来自深圳,年龄 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);
}
| 转换符 | 详细说明 | 示例 |
|---|---|---|
| %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);
}

| 标识 | 说明 |
|---|---|
| + | 为正数或负数添加符号 |
| 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);
}

| 标志 | 说明 |
|---|---|
| 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);
}
