有时候使用String.format格式化数据希望得到如下结果:
String str = String.format("下载完成%s%", "50.25");
System.out.printf(str);
这样干的结果竟然是报错啦
Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '%'
at java.util.Formatter.checkText(Formatter.java:2547)
at java.util.Formatter.parse(Formatter.java:2533)
at java.util.Formatter.format(Formatter.java:2469)
其实原因很简单,%在此处是特殊字符,需要转义的,改成如下写法就OK了。
String str = String.format("下载完成%s%%", "50.25");
System.out.printf(str);
当然这只是其中一种解决办法而已,我们还可以通过其他技巧来处理。比如
String str = String.format("下载完成%1$s%2$s", "50.35", "%");
System.out.println(str);
顺便整理一下转换符实现不同数据类型到字符串,方便查阅
转换符 | 说明 | 示例 |
---|---|---|
%s | 字符串类型 | github |
%c | 字符类型 | c |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 1024 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 99.66 |
%a | 十六进制浮点类型 | FF.35AE |
%e | 指数类型 | 9.38e+5 |
%g | 通用浮点类型(f和e类型中较短的) | --- |
%h | 散列码 | --- |
%% | 百分比类型 | --- |
%n | 换行符 | --- |
%tx | 日期与时间类型(x代表不同的日期与时间转换符) | --- |