简述:
最近在做Android性能优化的问题,看到之前在解决API接口问题时使用了占位符,本篇博客就来总结一下目前常用的三种解决方案,然后就三种方案的时间性能做一下对比。
字符串占位符的三种方案:
1、使用MessageFormat.format方法
MessageFormat.format方法从 JDK 5 开始支持变参,可以直接用逗号添加参数。使用如下:
/**
* @方法描述:使用MessageFormat.format
* @author lizhenya
*/
public static void method1(String... str) {
String originalData = "我是一名{0},我喜欢打{1}";
String format = MessageFormat.format(originalData, str);
}
2、使用String.format方法
想必String.format来处理占位符问题是大多数程序员最常用也是最容易想到的方法,它的使用简单,如下
public static void method2(String str) {
String originalData = "我是一名%1s";
String format = String.format(originalData, str);
}
3、使用正则表达式
由于正则表达式晦涩难懂,所以这种方式经常被忽略,使用如下:
public static void method3(String[] str) {
String originalData = "我是一名{0},我喜欢打{1}";
String fillStringByArgs = format(originalData, str);
}
private static String format(String str, String[] arr) {
Matcher m = Pattern.compile("\\{(\\d)\\}").matcher(str);
while (m.find()) {
str = str.replace(m.group(), arr[Integer.parseInt(m.group(1))]);
}
return str;
}
时间性能的对比:
时间性能由优到劣:方案三===》方案一===》方案二。
利用上面的代码我做了一下耗时的对比,下面是其中一次控制台输出信息:
方案一:我是一名台球爱好者,我喜欢打中式八球
方案一耗时:1ms
---------------------------
方案二输出信息:我是一名台球爱好者
方案二耗时:20ms
---------------------------
方案三输出信息:我是一名台球爱好者,我喜欢打中式八球
方案三耗时:0ms
当然一次测试具有偶然性,大家可以多次测试一下,最终可得出上述的结论。
上述过程中用到的Demo下载:Demo下载