String、StringBuilder和StringBuffer類
簡介
String/StringBuilder/StringBuffer這3個類都能創建字符串對象,它們都繼承自Object類。
其中String對象一經創建,空間固定不變,無法再向其中增、刪數據。即使提供了replace()方法,但也是一個字符對應一個字符的替換。總之它的空間大小不變。
而後兩者都是可變空間的String對象,因此它們都提供了append()方法、insert()方法以及delete()等修改空間數據的功能。StringBuilder類是StringBuffer類的簡版,但效率更高,且它們提供的功能是完全一致的。因此在StringBuilder能滿足要求時,建議使用StringBuilder類而非StringBuffer類。
StringBuilder類和StringBuffer類
它們的使用方法完全一致。因此以StringBuilder類為例。
該類用於創建String類,並提供向String數據中插入、刪除數據的功能。它最主要的兩個方法是append()和insert()。
構建String對象:
StringBuilder sb1 = new StringBuilder(); //對象中包含空字符串
StringBuilder sb2 = new StringBuilder("ac"); //對象中包含字符串ac
System.out.println(sb1);
System.out.println(sb2);
append()方法用於向已有String對象的尾部追加字符串數據,如果數據不是字符串類型,則會使用toString()方法轉換為String類型。
StringBuilder sb = new StringBuilder("ac");
sb.append("xx");
sb.append(3);
sb.append(3.12);
System.out.println(sb); //return value: acxx33.12
insert()方法用於向指定位置處插入數據。
StringBuilder sb = new StringBuilder("ac");
sb.append("xx"); //acxx
sb.append(3); //acxx3
sb.append(3.12); //acxx33.12
sb.insert(3,"x"); //acxxx33.12
sb.insert(3,2.12); //acx2.12xx33.12
還有以下一些String相關的通用方法,其中如果包含start、end位置的方法,一般都不會計算end邊界。
charAt(int n)
:返回對象中指定字符位置的字符,位置從0開始計算。delete(int start,int end)
:刪除從位置start到end位置處的子串並返回。不包含end邊界。deleteCharAt(int n)
:刪除指定位置處的字符並返回。indexOf(String str)
:取得從左算起str第一次出現的位置。lastIndexOf(String str)
:取得從右算起str第一次出現的位置。lenght()
:返回字符串長度。replace(int start,int end,String str)
:從start到end位置處(不包含end邊界)替換為str。reverse()
:反轉字符串。substring(int n)
:截取從位置n開始到結尾的子串。substring(int start,int end)
:截取從位置start到end處(不包含end邊界)的子串。toString()
:重寫Object類的toString()方法。將StringBuilder對象轉換為String對象。
String類
幾個重要的方法:
-
equals(Object obj)和equalsIgnoreCase(Object obj)
比較兩個對象是否相等。String類的equals()方法重寫後的比較行為是:僅當兩對象的內容相等時,equals()才返回true。String a = String.valueOf(123); String b = new String("123"); System.out.println(a.equals(b)); //true
-
compareTo(String str)和compareToIgnoreCase(String str)
繼承自接口Comparable,重寫後的方法按照字典順序將String對象和str比較,當String對象比str小時返回負數,大時返回正數,相等時返回0。只有當equals()返回true時compareTo()才返回0。 -
split(String regexp):將String按照指定的regexp劃分為String[]數組。
String b = new String("123 xyz 456"); String[] c = b.split(" "); //c={"123","xyz","456"}
-
valueOf(type value):將給定type類型的數據value轉換為String類型並封裝到String對象中。
String a = String.valueOf(123); //int --> String String a = String.valueOf(12.3); //double --> String
還有些其他方法:
charAt(int n)
:返回對象中指定字符位置的字符,位置從0開始計算。concat(String str)
:將指定字符串str連接到該字符串的尾部。contains(String str)
:String對象中是否包含str子串,如果為真則返回true,否則返回false。contentEquals(String str)
:如果該String對象的內容為str,則返回true,否則返回false。contentEquals(StringBuffer s)
:如果該String對象和StringBuffer對象s的內容相同,則返回true,否則返回false。同樣適用於StringBuilder類對象。startsWith(String str)
:測試String對象是否以str子串為前綴。返回boolean類型。endsWith(String str)
:測試String對象是否以str子串為結尾的後綴。返回boolean類型。indexOf(String str)
:取得從左算起str第一次出現的位置。lastIndexOf(String str)
:取得從右算起str第一次出現的位置。lenght()
:返回字符串長度。isEmpty()
:該String對象中是否含有數據。即length返回0時為真。matchs(String regexp)
:String對象是否能被正則表達式regexp匹配上。replace(char o,char n)
:將String中的o字符替換為新的n字符。substring(int n)
:截取從位置n開始到結尾的子串。substring(int start,int end)
:截取從位置start到end處(不包含end邊界)的子串。toLowerCase()
:返回小寫字母。toUpperCase()
:返回小寫字母。trim()
:返回該String忽略前導和後導空格後的副本。toString()
:重寫Object類的toString()方法。將String對象轉換為String對象。其實它自身就是String類型。toCharArray()
:將String返回為一個char數組。getChars(s,e,char[] c,c_s)
:將String對象中從s位置開始到e結束(不包含e邊界位置)的字符復制到char數組c中的c_s位置處。String s = new String("acde"); char[] sb1 = s.toCharArray(); //sb1 = {a,c,d,e} char[] sb2 = new char[3]; s.getChars(0,3,sb,0); //sb2 = {a,c,d}
int[]數組轉String[]數組
例如,有一個int[]數組,想將該數組轉換為String[]。這相當於重寫一個"String[] toString(int[] arr)"方法。
import java.util.*;
//int[]-->String[]
public static String[] toString(int[] arr) {
String[] sarr = new String[arr.length];
for (int i=0;i<arr.length;i++) {
sarr[i] = Integer.valueOf(arr[i]).toString();
}
return sarr;
}
public class TestToString {
public static void main(String[] args) {
int[] arr = {12,3,4,5,66};
String[] sarr = toString(arr);
System.out.println(Arrays.toString(sarr));
}
}
int[]數組轉String字符串
例如int[]數組{1,2,3,4}轉成字符串,結果為"1 2 3 4"。即將數組中的值變為字符串並使用空格分隔。
public class IntToString {
// int[] --> String
public static String toString(int[] arr) {
StringBuilder sarr = new StringBuilder();
for (int i=0;i<arr.length;i++) {
if (i != arr.length - 1) {
sarr.append(arr[i] + " ");
} else {
sarr.append(arr[i]);
}
}
return sarr.toString();
}
public static void main(String[] args) {
int[] arr = {12,3,4,5,66};
String sarr = toString(arr);
System.out.println(sarr);
}
}
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7782141.html
註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!
String、StringBuilder和StringBuffer類