Hello World

吞风吻雨葬落日 欺山赶海踏雪径

0%

使用sl4j中的MessageFormatter格式化字符串

使用sl4j中的MessageFormatter格式化字符串

小伙伴建立了一个新项目,想统一化日志打印。但是我看到实现代码还是使用的MessageFormat.format()
方法来格式化字符串,这就意味着字符串模板需要写诸如{0}, {1}, {2} 这样的占位符,极不方便。
我想到sl4j中的MessageFormatter可以用来格式化字符串。

其实MessageFormatter格式化字符换非常简单,给个示例就能明白:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Test
public void testArrayFormat2(){
String format1="Hello, {} {} {} {}";
System.out.println(format(format1,"John","Doe","Rick","Morty"));

String format2="Hello, {} {} {} ";
System.out.println(format(format2,"John","Doe","Rick","Morty"));

String format3="Hello, {} {} {} {} {} ";
System.out.println(format(format3,"John","Doe","Rick","Morty"));
}

public static String format(String format,String...args){
return MessageFormatter.arrayFormat(format,args).getMessage();
}

输出

1
2
3
Hello, John Doe Rick Morty
Hello, John Doe Rick
Hello, John Doe Rick Morty {}

这种方法避免了MessageFormat.format不需要逐个设置占位符序号。

其实 MessageFormatter的原理和MessageFormat的实现方式非常类似,都是使用定位 {} 来找到对应的占位符,MessageFormat 多做一步拆解出占位符序号,然后映射上参数数组的位置。