字串分割——效能優化
阿新 • • 發佈:2019-01-23
字串函式的使用,肯定是使用的非常頻繁的。對於計算機來說,對字串的處理遠遠沒有對二進位制的處理效能快。
但是如果單純的對比使用字串,效能也是有區別的。接下來,我會對字串使用的幾種方法進行對比,尋找出一種更優的字串 處理方法。
在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();而完全由自己實現的分割演算法效能最好,但相對來說,程式碼的可讀性和系統的可維護性最差,只有在系統性能稱為主要矛盾的時候才推薦使用該方法。