java.util.UnknownFormatConversionException: Conversion = '%'
目录
问题现象
最近在做一个java项目使用String.format进行控制台打印,结果出现如下错误:
最关键的是这个问题是偶现的,通过google定位到问题还是格式化输出过程中%之间冲突了
别人类似的问题
百度搜搜发现别人的都是因为System.out.printf引起的。
Java从1.5版本开始才具体格式化输出的功能,才有了printf这个方法,可以通过指定不同的格式来控制输出样式,其中%表示格式说明的起始符号,不可缺少。而我的问题就是因为接口响应的日志中包含了%,导致printf打印时出现异常。
别人解决办法
使用 “%%” 去替换掉字符串中的 “%",例如: String str = “hello world! % w”; System.out.printf(str.replaceAll("%”, “%%"));
别人结果如下:
hello world! % w
我的解决办法
同样是替换
|
|
别人总结
只要出现了这个错误,不管Conversion = ‘任意字符’ 中是哪个值,那肯定是你使用了printf打印内容,但是其中包括了%这个关键字符,可以使用多加一个百分号来进行转义(%%)就可以正常输出了。
我的想法
这两种输出格式化应该都是因为百分号的冲突问题才报的错,故附上格式化输出的对应表格,看到百分号我才恍然大悟
格式化输出对应表
转换符 | 详细说明 | 示例 |
---|---|---|
%s | 字符串类型 | “喜欢请收藏” |
%c | 字符类型 | ‘m’ |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 88 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 8.888 |
%a | 十六进制浮点类型 | FF.35AE |
%e | 指数类型 | 9.38e+5 |
%g | 通用浮点类型(f和e类型中较短的) | 不举例(基本用不到) |
%h | 散列码 | 不举例(基本用不到) |
%% | 百分比类型 | %(%特殊字符%%才能显示%) |
%n | 换行符 | 不举例(基本用不到) |
%tx | 日期与时间类型(x代表不同的日期与时间转换符) | 不举例(基本用不到) |