技术小黑屋

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 推荐

我将要在知乎上进行我的第二场 Live,题为《我学安卓的那些套路》,来分享我学习安卓的经验与心得。覆盖的内容如下:

  • Android 需要打好哪些编程基础?
  • 除了编程基础,我们还需要补充哪些能力?
  • 作为 Android 程序员,如何把握好技术的宽度和深度?
  • Android 每块知识学到什么程度,怎么做到?
  • 如何从日常的工作中获取最大的收益?
  • Android 那么多库,我该选择哪些,怎么学,学到什么程度?
  • 对于初学者或大学生的建议有哪些?

如果你想听一听我的经验或者有疑惑,欢迎参与。

参与地址:https://www.zhihu.com/lives/802899577341620224