是否有用于解析printf格式字符串的Java库?

Bwm*_*mat 6 java printf

我正在为一台带有'printf'操作码的机器编写一个模拟器,虽然我知道Formatter类可能足以实际格式化字符串,但我需要一种方法来计算参数的数量.由printf调用消耗.

在我的头脑中,我可能会用正则表达式来计算'%'的数量,但我对格式字符串不太熟悉,所以我可能算不上......(不包括转义的,等等)

编辑:我实际上需要参数的数量,以及参数#到参数类型的映射,例如,"hello%s%+.3i"会给{0 - > String,1 - > Integer}

Boh*_*ian 7

格式字符串将每个解释%为占位符,文字%被转义为%%,所以它应该像这样简单:

String formatString;
int parameterCount = formatString.replace("%%", "").split("%").length - 1;
Run Code Online (Sandbox Code Playgroud)

此代码首先删除所有转义(加倍)%,然后%通过拆分计数.


Jas*_*n S 1

为什么不使用类似的正则表达式%(?:%|[0-9]+([dox]))并以这种方式检查格式类型说明符?

还有另一个关于使用正则表达式解析 sprintf 格式字符串的主题,这可能会给您更多的想法。除非您指定需要 printf() 的哪些功能,否则很难推荐精确的正则表达式。

或者,正如我在评论中提到的,如果您无论如何都使用其他编译器工具(例如 ANTLR 或 Parboiled),请使用它通过简单的语法规范将格式字符串解构为适当的片段。