技术小黑屋

MissingFormatArgumentException: Format Specifier 'S'

贴出一个简单的异常,分析一下原因,以及推荐一个相对好一些的替代方法。 如下,如果我们进行字符串格式化提供的值的数量少于字符串格式符(%s)的数量,就会抛出MissingFormatArgumentException异常。

错误代码

lineos:false
1
2
String format = "%s/%s";
String.format(format, "a");

崩溃信息

lineos:false
1
2
3
4
5
6
Exception in thread "main" java.util.MissingFormatArgumentException: Format specifier 's'
  at java.util.Formatter.format(Unknown Source)
  at java.util.Formatter.format(Unknown Source)
  at java.lang.String.format(Unknown Source)
  at Concatenation.testFormat(Concatenation.java:17)
  at Concatenation.main(Concatenation.java:4)

替代方法

相比字符串的格式化操作,使用字符串的替换更加安全,避免因为疏忽或者考虑不全等带来的崩溃问题。

lineos:false
1
String s = "%country%/%city%".replace("%country%", "China").replace("%city%", "Beijing");

其他


我的知乎 Live 推荐