摘要:字串處理(String、StringBuilder、StringBuffer)
String物件是我們經常會運用的一種物件,因此在這邊特別提出作介紹。首先先示範一些String常用的一些方法:
String str = "測試abcABC字串";
System.out.println(str.length());
System.out.println(str.charAt(2));
System.out.println(str.equals("測試abcABC字串"));
System.out.println(str.contains("測試"));
System.out.println(str.endsWith("字串"));
System.out.println(str.startsWith("測試"));
System.out.println(str.indexOf("試"));
System.out.println(str.substring(0,2));
System.out.println(str.substring(2));
System.out.println(str.toLowerCase());
System.out.println(str.toUpperCase());
System.out.println(str.replace("ABC","DEF"));
System.out.println(str.replaceAll("ABC","DEF"));
String[] strArray = str.split("abc");
- 首先第1行我們宣告了一個String變數,並指定它的內容。
- 第2行用length()方法取得字串內容的字數。
- 第3行用charAt()取得某個位置的文字。
- 第4行用equals()來比較字串和另一個字串是否相同。
- 第5行用contains()來判斷字串中是否包含某個文字。
- 第6行及第7行分別用endsWith()及startsWith()來判斷字串是否以某個字串結尾及開頭。
- 第8行用indexOf()來取得某個文字在字串中的位置。
- 第9行和第10行都是用substring()來切割字串,不同的地方在第9行帶入兩個參數,字串會切隔為從第一個參數位置到第二個參數位置的子字串,第10行帶入一個參數則會切割成從該參數位置到字串結束位置的子字串。
- 第11行及第12行分別將字串轉換為小寫及大寫。
- 第13行及第14行都是置換字串的方法,將第一個參數置換為第二個參數,第13行只會置換第一個符合條件的字串,第14行則會置換所有符合條件的字串。
- 第15行利用split()將字串依指定參數拆解為Array。
String的組合很簡單,當我們有兩個String物件時,可以直接用相加的方式將兩者組合起來,如下:
"測試" + "字串";
也可以用較進階的StringBuilder達到目的,如下:
StringBuilder builder = new StringBuilder();
builder.append("測試");
builder.append("字串");
當然,StringBuilder還提供很多功能,可以協助我們更進一步控制字串的組合,例如:
StringBuilder builder = new StringBuilder();
builder.append("測試");
builder.append("字串");
builder.insert(2,"ABC");
builder.delete(4,5);
builder.reverse();
System.out.println(builder.toString());
我們除了可以用append()在字串尾端加上文字,也可以用insert()在特定的位置插入文字,或是用delete()刪除特定位置範圍的文字,用reverse()反轉文字順序,最後用toString()把StringBuilder物件轉換為String物件。
除此之外,還有另外一個和StringBuilder很相似的物件叫做StringBuffer,StringBuffer的用法和StringBuilder幾乎一樣,如下:
StringBuffer buffer = new StringBuffer();
buffer.append("測試字串");
buffer.insert(2,"ABC");
buffer.delete(2,3);
buffer.reverse();
System.out.println(buffer.toString());
兩者之間的不同處在於StringBuffer是Thread-save的,StringBuilder則不是,Thread的觀念在後面的章節會提到,簡單來說Thread-save就是當多支程式同時存取同一個StringBuffer物件時,不會因此影響到StringBuffer的運作或是造成內容值異常,當然也因此StringBuffer的效率會比StringBuilder來的差。因此在不考慮多執行緒的情況下,可以選用效率較好的StringBuilder,若需要考慮多執行緒,則建議使用StringBuffer以避免不同步的問題造成資料異常。
REF:http://blog.xuite.net/jane17512001/PenguinDesign/116288109-%E5%AD%97%E4%B8%B2%E8%99%95%E7%90%86(String%E3%80%81StringBuilder%E3%80%81StringBuffer)