首页 > 解决方案 > 为什么我收到以下 String.format() 代码的 UnknownFormatConversionException?

问题描述

我试图组合一个正则表达式,它可以通过字符串格式选项使用重复模式。

String non_dot = "[^\\.]";
String dot     = "\\.";
String sfp1    = "%1$s*?%2$s";
String sf      = sfp1 + sfp1 + sfp1 + sfp1.substring(0,3) + "*";
System.out.println(sf);
String regex   = String.format(sf, non_dot, dot);
System.out.println(regex);

打印输出sf如下:

%1$s*?%2$s%1$s*?%2$s%1$s*?%2$s%1$*

但是,当需要评估String.format(...), 对于regex变量的推导时,我的代码会爆炸:

Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '1'
    at java.util.Formatter.checkText(Formatter.java:2547)
    at java.util.Formatter.parse(Formatter.java:2533)
    at java.util.Formatter.format(Formatter.java:2469)
    at java.util.Formatter.format(Formatter.java:2423)
    at java.lang.String.format(String.java:2792)
    at Solution.main(Solution.java:23)

我一直在使用这些资源。

据此,它应该工作!

有人能发现我为什么会收到这个错误吗?

标签: javastringformatter

解决方案


正如@JB Nizet 的评论所说:您的子字符串结束绑定是错误的,因此您%1$*的格式字符串中有,这不是问题(它在s之后缺少$)。


推荐阅读