我是靠谱客的博主 难过手机,最近开发中收集的这篇文章主要介绍java.util.UnknownFormatConversionException: Conversion = ‘j‘ || Conversion = ‘D‘ || Conversion = ‘Y‘,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

执行内容:

String a = "select * from j_question j where j.status = %s and j.title like '%java%'";
String format = String.format(a, 1);
System.out.println(format);

拼接SQL时,最后需要 format 替换字符串中的 %s 占位符。

预期效果:

select * from j_question j where j.status = 1 and j.title like '%java%'

报错内容:

Conversion = ‘j’ 或者是 Conversion = ‘D’ 或者 Conversion = ‘Y’

Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = 'j'
	at java.base/java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2839)
	at java.base/java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2865)
	at java.base/java.util.Formatter.parse(Formatter.java:2713)
	at java.base/java.util.Formatter.format(Formatter.java:2655)
	at java.base/java.util.Formatter.format(Formatter.java:2609)
	at java.base/java.lang.String.format(String.java:2897)

错误原因:

String.format() 格式化字符串输出时,任何未明确定义为转换的字符都是非法的,在格式字符串中使用此类字符将导致 UnknownFormatConversionException。

1、先来明确一下 % 的作用:

% 就相当于一种语法格式, % 后面需要跟上需要转换的参数,而参数的取值,无非就如下这些情况:

转换参数类别说明
‘b’,‘B’常规如果参数 arg 为 null,则结果为 “false”。如果 arg 是一个 boolean 值或 Boolean,则结果为 String.valueOf() 返回的字符串。否则结果为 “true”。
‘h’,‘H’常规如果参数 arg 为 null,则结果为 “null”。否则,结果为调用 Integer.toHexString(arg.hashCode()) 得到的结果。
‘s’, ‘S’常规如果参数 arg 为 null,则结果为 “null”。如果 arg 实现 Formattable,则调用 arg.formatTo。否则,结果为调用 arg.toString() 得到的结果。
‘c’,‘C’字符结果是一个 Unicode 字符
‘d’整数结果被格式化为十进制整数
‘o’整数结果被格式化为八进制整数
‘x’, ‘X’整数结果被格式化为十六进制整数
‘e’,‘E’浮点结果被格式化为用计算机科学记数法表示的十进制数
‘f’浮点结果被格式化为十进制数
‘g’,‘G’浮点根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化。
‘a’,‘A’浮点结果被格式化为带有效位数和指数的十六进制浮点数
‘t’, ‘T’日期/时间日期和时间转换字符的前缀。请参阅日期/时间转换。
‘%’百分比结果为字面值 ‘%’ (’"u0025’)
‘n’行分隔符结果为特定于平台的行分隔符

2、再来解释一下什么是未明确定义的字符:

通过上面这些取值我们知道了,%[参数] 顶多就 %b、%B、%h、%H、%s、%S … %%、%n 等。

而在需要转换的字符串中有这么一段 %java%,也就是他会把 %j 当做一个转换参数,很显然上边的取值中就没有 %j 嘛,所以就报错了,就如同错误内容一样:Conversion = ‘j’

那么需要用到 % 的地方怎么办呢?

解决方法:

通过上边的 % 取值发现,%% 最终的输出结果为一个 %,所以解决方法就是使用双重 %,

比如之前的 %java%,需要修改为 %%java%%

String a = "select * from j_question j where j.status = %s and j.title like '%%java%%'";

博客园:https://www.cnblogs.com/niceyoo

最后

以上就是难过手机为你收集整理的java.util.UnknownFormatConversionException: Conversion = ‘j‘ || Conversion = ‘D‘ || Conversion = ‘Y‘的全部内容,希望文章能够帮你解决java.util.UnknownFormatConversionException: Conversion = ‘j‘ || Conversion = ‘D‘ || Conversion = ‘Y‘所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部