
string.format()方法是基于java.util.formatter类实现的,它通过解析格式字符串来确定如何格式化参数。在格式字符串中,百分号(%)是一个特殊字符,它标志着一个格式说明符的开始。例如,%s表示将一个字符串参数插入到此处,%d表示一个整数参数。
考虑以下基本用法:
String format = "您的名字是 %s"; String text = String.format(format, "Harry"); System.out.println(text); // 输出: 您的名字是 Harry
这工作正常,因为%s被正确解析并替换为提供的参数。
当您尝试在同一个格式字符串中既使用格式说明符又使用字面量百分号时,问题就出现了。例如,如果您想打印“100%point”:
String format = "您的名字是 %s, 100%point"; String name = String.format(format, "Harry"); System.out.println(name); // 预期输出: 您的名字是 Harry, 100%point
运行上述代码会导致以下运行时错误:
立即学习“Java免费学习笔记(深入)”;
java.util.UnknownFormatConversionException: Conversion = 'p'
at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2781)
... (部分堆栈信息省略)这个异常的发生是因为Formatter解析器在遇到100%point中的%p时,将其视为一个不合法的格式说明符。Formatter期望%后面跟着一个有效的转换字符(如s、d、f等),但p不是一个标准的转换字符,因此抛出了UnknownFormatConversionException。它错误地将字面量百分号后面的字符当作了转换字符。
要解决这个问题,您需要告诉String.format()方法,某个百分号是作为一个字面量字符而不是一个格式说明符的开始。实现这一点的标准方法是使用双百分号(%%)来转义单个百分号。
当Formatter遇到%%时,它会将其解释为单个字面量百分号字符,并将其插入到输出字符串中,而不会尝试将其解析为格式说明符。
将上述有问题的代码修改为:
String format = "您的名字是 %s, 100%%point"; // 注意这里的 100%%point String name = String.format(format, "Harry"); System.out.println(name); // 预期输出: 您的名字是 Harry, 100%point
现在,运行这段代码将得到正确的输出:“您的名字是 Harry, 100%point”,并且不会再出现UnknownFormatConversionException。
掌握String.format()中百分号的转义是编写健壮且符合预期的Java格式化代码的基础。通过遵循%%的规则,您可以避免常见的运行时错误,并有效地利用String.format()的强大功能。
以上就是Java String.format():如何正确处理百分号字面量的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号