java - 为什么我收到以下 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)
我一直在使用这些资源。
据此,它应该工作!
有人能发现我为什么会收到这个错误吗?
解决方案
正如@JB Nizet 的评论所说:您的子字符串结束绑定是错误的,因此您%1$*
的格式字符串中有,这不是问题(它在s
之后缺少$
)。
推荐阅读
- reactjs - React Hooks - 默认情况下哪些是异步的?
- c++ - 在应用程序中读取 Docker 容器状态
- python - 如何降低子集和问题的时间复杂度
- c# - Visual Studio 2019 for Mac 在 Mac OS 上运行的 C# 代码无法写入/读取本地 Azure 存储帐户模拟器
- swift - 导入 UIKit.UIViewController 而不是导入整个框架的好处
- ansible - 如何遍历字典列表及其内容列表
- angular - 销毁组件时是否应该手动关闭 EventEmitter?
- javascript - React Redux reducer 未更新状态
- python - 值查看/修改窗口
- c# - ACTIVEMQ + NMS 无法同步接收