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

时间:2012-04-01 23:03:28

标签: java printf

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

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

编辑:我实际上需要参数的数量,以及参数#到参数类型的映射,因此,例如,“hello%s%+。3i”会给出{0 - >字符串,1 - >整数}

2 个答案:

答案 0 :(得分:7)

Format Strings将每个%解释为占位符,将文字%转义为%%,因此它应该像这样简单:

String formatString;
int parameterCount = formatString.replace("%%", "").split("%").length - 1;

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

答案 1 :(得分:1)

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

还有另一个关于parsing sprintf format strings with regex's的SO主题可能会给你一些更多的想法。除非你指定你想要的printf()的哪些特性,否则很难推荐一个精确的正则表达式。

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