我想分析最终传递给的模式
String.format(String pattern, Object... args)
让我们考虑一下模式
"Integer is %d, String is %s"
有没有一种方法可以解析这个模式来确定
- arg0 将被格式化为数字
- arg1 将被格式化为字符串
显然,我可以使用正则表达式来做到这一点,但是当在模式中指定索引等时,这会变得更加困难。例如,让我们考虑另一种模式
"String is %2$s, Integer is %1$d"
这里 arg1 在 arg0 之前指定,但是这两个模式对于相同的参数具有相同的格式化程序。
我真的很想使用核心java类来解析模式并分析它,但似乎所有方法都是私有(private)的。在底层,String.format()
使用 Formatter .
最终,我尝试编写一个测试用例来验证我的各种语言翻译文件并发现冲突(例如,一种语言指定日期格式,另一种语言指定同一参数的数字格式)。
最佳答案
对于开源项目,您可以基于 Formatter (source) 的源代码构建自己的 TestFormatter 。然后,在 format
() 方法的 switch case 中,记住参数类型如下:
代码:
argument = args[argumentIndex];
switch (conversion) {
case 'b':
argumentHashMap.put(new Integer(argumentIndex), Boolean.class);
booleanFormat(argument, flags, width, precision, origConversion);
break;
case 's':
argumentHashMap.put(new Integer(argumentIndex), String.class);
stringFormat(argument, flags, width, precision, origConversion);
break;
case 'd':
argumentHashMap.put(new Integer(argumentIndex), Double.class);
decimalConversion(argument, flags, width, precision, origConversion);
break;
...
我添加了带有 argumentHashMap
的行。
关于java - 有什么方法可以分析传递给 String.format(...) 的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24410152/