1. 程式人生 > >字串佔位符的三種解決方案及其時間效能對比

字串佔位符的三種解決方案及其時間效能對比

簡述:

   最近在做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下載