1. 程式人生 > >字串分割——效能優化

字串分割——效能優化


       字串函式的使用,肯定是使用的非常頻繁的。對於計算機來說,對字串的處理遠遠沒有對二進位制的處理效能快。
       但是如果單純的對比使用字串,效能也是有區別的。接下來,我會對字串使用的幾種方法進行對比,尋找出一種更優的字串 處理方法。
       在Java語言中。String物件是一種常用的資料型別。但不是基本資料型別。String物件可以算是對Char物件的進一步封裝。


       我們最常使用的字串函式,包含:subString Split indexOf等等。
接下來,對幾種例子做一下對比:


1、字串的拼接
對於新手程式設計師,常使用的寫法:

String str="hello ";
str+="world!";
System.out.println("str="+str);         //列印結果:str=hello world!


有經驗的程式設計師,常用寫法:

StringBuilder str=new StringBuilder();
str.append("hello ")
 .append("world!");
System.out.println("str="+str.toString());          //列印結果:hello world!


       這兩種寫法的效率,幾乎所有的Java程式設計師心裡都有答案了吧。這裡就不再花篇幅寫了。這篇文章主要說分割查詢的優化:


2、字串分割查詢

String orgStr=null;
StringBuilder sb=new StringBuilder();
for(int i =0 ; i < 1000; i ++){
    sb.append(i);
    sb.append(",");
}
orgStr=sb.toString();


第一種方式,使用split:

for( int i =0 ; i < 1000 ; i ++){
    orgStr.split(",");
}


第二種方式,使用StringTokenizer分割

StringTokenizer st=new
StringTokenizer(); for (int i = 0; i < 1000; i ++) { while(st.hasMoreTokens()){ st.nextToken(); } st=new StringTokenizer(orgStr,","); }


第三種方式,自己動手完成分割

String tmp=orgStr;
for (int i=0; i<1000; i++) {
    while(true){
        String splitStr=null;
        int j=tmp.indexOf(",");    //找分隔符的位置
        if(j<0) break;             //沒有分隔符存在,break
        splitStr=tmp.substring(0,j);  //找到分隔符,擷取子字串
        tmp=tmp.substring(j+1);       //剩下需要處理的字串
    }
    tmp=orgStr;
}


分析結果:
效能比較


       split()方法功能雖然強大,但是效率最差;StringTokenizer效能由於split()方法,因此,在能夠給使用StringTokenizer的模組中,就沒有必要使用split();而完全由自己實現的分割演算法效能最好,但相對來說,程式碼的可讀性和系統的可維護性最差,只有在系統性能稱為主要矛盾的時候才推薦使用該方法。