gpt4 book ai didi

java - 有什么方法可以分析传递给 String.format(...) 的模式

转载 作者:太空宇宙 更新时间:2023-11-04 14:45:40 27 4
gpt4 key购买 nike

我想分析最终传递给的模式

String.format(String pattern, Object... args)

让我们考虑一下模式

"Integer is %d, String is %s"

有没有一种方法可以解析这个模式来确定

  1. arg0 将被格式化为数字
  2. 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com