1. 程式人生 > >java各種資料擷取方式及效能

java各種資料擷取方式及效能

1.split()+正則表示式來進行擷取。 
將正則傳入split()。返回的是一個字串陣列型別。不過通過這種方式擷取會有很大的效能損耗,因為分析正則非常耗時。

String str = "abc,12,3yy98,0";
String[]  strs=str.split(",");
for(int i=0,len=strs.length;i<len;i++){
    System.out.println(strs[i].toString());
}
1
2
3
4
5
執行結果:

abc
12
3yy98
0
1
2
3
4
2.通過subString()方法來進行字串擷取。 
subString通過不同的引數來提供不同的擷取方式 
2.1只傳一個引數 
例如:

    String sb = "bbbdsajjds";
    sb.substring(2);
1
2
將字串從索引號為2開始擷取,一直到字串末尾。(索引值從0開始); 
2.2傳入2個索引值

String sb = "bbbdsajjds";
sb.substring(2, 4);
1
2
從索引號2開始到索引好4結束(並且不包含索引4擷取在內,也就是說實際擷取的是2和3號字元); 
執行結果如下:

bdsajjds
bd
1
2
3.通過StringUtils提供的方法 
StringUtils.substringBefore(“dskeabcee”, “e”); 
/結果是:dsk/ 
這裡是以第一個”e”,為標準。

StringUtils.substringBeforeLast(“dskeabcee”, “e”) 
結果為:dskeabce 
這裡以最後一個“e”為準。


short型別轉換為各個型別
short s = 456;
int changeInt = s;//大型別自動轉換
float changeFloat = s;//大型別自動轉換
String changeString = String.valueOf(s);//用valueOf轉
changeString = "" + s;//用+轉
changeString = ((Short)s).toString();//呼叫封裝型別的toString轉


byte陣列擷取當然要提到效率非常高的arraycopy,java中呼叫方式如下:
System.arraycopy(src, srcPos, dest, destPos, length)
引數解析:
src:byte原來的陣列
srcPos:擷取原byte陣列起始位置(0位置有效)
dest,:byte目的陣列(擷取後存放的陣列)
destPos:擷取後存放的陣列起始位置(0位置有效)
length:擷取的資料長度

由String型別轉換為byte[]陣列的話想以字元輸出方式:
    例子:byte[] a{we,er,12,}
        String er =new String(a);
        system.out.println(er) 
這樣做的原因是因為由String型別轉換為byte[]生成的是ascii碼,
所以只要把byte[]強制轉換為String型別就行
ws>123456<ws

String型別資料擷取
例子如下:
    
    String tt1 = "XY>32ef01020304?7altitude=0,NS=,latty=48?<XY";//宣告一個字串
    String wsks11 = "=";//宣告要擷取的位元組標記
    int unte1 = tt1.indexOf(wsks11);//得到標記的下標
    String sub11 = tt1.substring(unte1 + 1, unte1 + 2);//根據下標得到你想要的值
    System.out.println(sub11);
擷取某個標識的前段或者後段例子:
    String kko = "154.00";
    String jje = "8975.23";
    String jjh = kko + "," + jje;
    String d = jjh.substring(0, jjh.lastIndexOf(","));//擷取標識的前段欄位
    String h = jjh.substring(jjh.indexOf(",") + 1);//擷取標識的後段
    System.out.println(d);

    String str5 = "<abcd efg>higklmnopq<rstu vwxyz";
    System.out.println(str5.substring(str5.indexOf(">") + 1, str5.lastIndexOf("<")));//擷取標識的中間斷

由String型別轉換為byte[]的話,String型別裡有幾個字元byte[]的長度就是幾,比如:
    String a="12345"  轉換為byte[]它的長度就是5   如果以byte[下標] 檢視的話他會是ASCII碼
int 轉String
String qwe = Integer.toString(random1);
String 轉int
int i=Integer.parseInt(s1);//注意,如果這段String型別資料裡有空格的話就會報錯要.trim()然後再去轉就OK