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