String.format()方法

Java String.format()详解
本文详细解析了Java中String.format()方法的使用,包括不同格式转换符和标志的应用,通过实例展示了如何生成格式化字符串,适用于多种场景如日期、数字和百分比的格式化。

重载方法
format(String format, Object… args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。
format(Locale locale, String format, Object… args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。
转换符说明

%s 字符串类型 "mingrisoft"  

%c 字符类型 'm'  

%b 布尔类型 true  

%d 整数类型(十进制) 99  

%x 整数类型(十六进制) FF  

%o 整数类型(八进制) 77  

%f 浮点类型 99.99  

%a 十六进制浮点类型 FF.35AE  

%e 指数类型 9.38e+5  

%g 通用浮点类型(f和e类型中较短的)  

%h 散列码  

%% 百分比类型 %  

%n 换行符  

%tx 日期与时间类型(x代表不同的日期与时间转换符 

转换符标志

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

例子:

String str=null;  
str=String.format("Hi,%s", "王力");  
System.out.println(str);  
str=String.format("Hi,%s:%s.%s", "王南","王力","王张");            
System.out.println(str);                           
System.out.printf("字母a的大写是:%c %n", 'A');  
System.out.printf("3>7的结果是:%b %n", 3>7);  
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("50元的书打8.5折扣是:%f 元%n", 50*0.85);  
System.out.printf("上面价格的16进制数是:%a %n", 50*0.85);  
System.out.printf("上面价格的指数表示:%e %n", 50*0.85);  
System.out.printf("上面价格的指数和浮点数结果的长度较短的是:%g %n", 50*0.85);  
System.out.printf("上面的折扣是%d%% %n", 85);  
System.out.printf("字母A的散列码是:%h %n", 'A');  

Hi,王力  
Hi,王南:王力.王张  
字母a的大写是:A   
3>7的结果是:false   
100的一半是:50   
10016进制数是:64   
1008进制数是:144   
50元的书打8.5折扣是:42.500000 元  
上面价格的16进制数是:0x1.54p5   
上面价格的指数表示:4.250000e+01   
上面价格的指数和浮点数结果的长度较短的是:42.5000   
上面的折扣是85%   
字母A的散列码是:41   

//$使用  
str=String.format("格式参数$的使用:%1$d,%2$s", 99,"abc");             
System.out.println(str);                       
//+使用  
System.out.printf("显示正负数的符号:%+d与%d%n", 99,-99);  
//补O使用  
System.out.printf("最牛的编号是:%03d%n", 7);  
//空格使用  
System.out.printf("Tab键的效果是:% 8d%n", 7);  
//.使用  
System.out.printf("整数分组的效果是:%,d%n", 9989997);  
//空格和小数点后面个数  
System.out.printf("一本书的价格是:% 50.5f元%n", 49.8);

格式参数$的使用:99,abc  
显示正负数的符号:+99-99  
最牛的编号是:007  
Tab键的效果是:       7  
整数分组的效果是:9,989,997  
一本书的价格是:49.80000
<think>好的,用户问的是String.format方法的作用。我需要先解释清楚这个方法的基本功能,然后给出使用示例,这样用户能更好地理解。 首先,String.format用于格式化字符串,替换占位符。需要说明常见的占位符,比如%s、%d、%f等,以及它们的使用方式。可能用户是刚开始学Java,所以例子要简单明了。然后,用户可能想知道为什么用这个方法而不是字符串拼接。这时候需要对比两者的优缺点,比如可读性和性能上的优势。特别是处理多个变量时,格式化更清晰。 还要考虑国际化的问题,不同地区的数字和货币格式可能不同。可以提到使用Locale参数的方法,这样用户知道如何处理多语言环境。 接下来,用户可能遇到的问题包括格式错误,比如参数型不匹配导致的异常。需要提醒注意事项,比如参数数量和型要匹配,避免运行时错误。 最后,用户可能想知道实际应用场景,比如日志记录、用户界面显示等。举几个实际的例子,帮助他们理解何时使用这个方法。 相关问题方面,应该涵盖占位符列表、与拼接的区别、本地化处理、性能比较以及常见错误。这样用户可以进一步深入学习或解决相关问题。</think>`String.format` 是 Java 中用于格式化字符串的方法,其核心作用是 **将占位符替换为指定参数**,生成格式统一、可读性高的字符串。似于 C 语言的 `printf`,但返回值为 `String`。 --- ### 基本语法 ```java String formattedString = String.format("格式模板", 参数1, 参数2, ...); ``` --- ### 常见占位符示例 | 占位符 | 作用 | 示例 | |--------|-----------------------|---------------------| | `%s` | 字符串 | `String.format("%s年%d月", 2024, 3)` → `"2024年3月"` | | `%d` | 整数(十进制) | `String.format("第%d名", 1)` → `"第1名"` | | `%f` | 浮点数 | `String.format("价格%.2f元", 9.99)` → `"价格9.99元"` | | `%c` | 字符 | `String.format("性别:%c", '男')` → `"性别:男"` | | `%b` | 布尔值 | `String.format("是否通过:%b", true)` → `"是否通过:true"` | | `%%` | 百分号(转义) | `String.format("折扣:%d%%", 85)` → `"折扣:85%"` | --- ### 核心优势 1. **可读性**:避免字符串拼接的冗余代码 ```java // 拼接写法 String s = "用户:" + name + ",年龄:" + age + ",余额:" + money + "元"; // 格式化写法 String s = String.format("用户:%s,年龄:%d,余额:%.2f元", name, age, money); ``` 2. **国际化支持**:自动适配本地化格式(如货币、千分位) ```java // 按美国格式输出:$1,234.57 String s = String.format(Locale.US, "金额:%,.2f", 1234.567); ``` 3. **格式控制**:对齐、补零、精度限制等高级操作 ```java // 右对齐并保留2位小数,宽度10: 3.14 String s = String.format("%10.2f", 3.1415); // 补零:007 String s = String.format("%03d", 7); ``` --- ### 注意事项 - **参数型需匹配占位符**:若型不匹配会抛出 `IllegalFormatConversionException`。 - **参数数量需匹配占位符数量**:缺少参数会抛出 `MissingFormatArgumentException`。 - **性能权衡**:频繁调用可能比 `StringBuilder` 略慢,但可读性优先。 --- ### 实际应用场景 1. **日志记录**:格式化输出时间、线程名、日志等级等。 2. **用户界面**:动态生成带变量的提示语(如 `"剩余%d秒"`)。 3. **数据导出**:按固定格式生成 CSV、JSON 字符串。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值