String.format要求占位符字符串为%s
。我正在使用slf4j,它使用{}
作为占位符字符串。
JDK中是否有任何内容允许我使用{}
作为占位符字符串来执行String.format?
如下面的评论中所述,有MessageFormat.format()
但这需要我将索引放在括号之间。例如。 {0}
。
答案 0 :(得分:0)
1)您无法避免在Formatter中使用基于“%”的占位符。所以Formatter / Formattable不是解决方案。
2)如果您需要一种方法,用参数值替换{}占位符,很容易实现。
public static String insertPlaceholders(String template, Object... args) {
if (args.length == 0) {
return template;
}
// best guess for capacity
final StringBuilder sb = new StringBuilder(template.length() + args.length * 8);
int index = 0;
int offset = 0;
while (index < args.length) {
final int p = template.indexOf("{}", offset);
if (p < 0) {
break;
}
sb.append(template, offset, p);
sb.append(args[index]);
offset = p + 2;
++index;
}
sb.append(template, offset, template.length());
return sb.toString();
}
单元测试:
@Test
public void testInsertPlaceholders() {
assertSame("Test", StringUtils.insertPlaceholders("Test"));
assertEquals("Test", StringUtils.insertPlaceholders("Test", 1));
assertEquals("Test 2", StringUtils.insertPlaceholders("Test {}", 2));
assertEquals("Test 3 {}", StringUtils.insertPlaceholders("Test {} {}", 3));
assertEquals("Hello World!", StringUtils.insertPlaceholders("Hello {}!", "World"));
}