使用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 多做一步拆解出占位符序号,然后映射上参数数组的位置。