java 操作字串String和StringBuffer
java提供兩個類來操作字串:String和StringBuffer。
如果處理一些小的文字建議使用String類;處理大型文字使用StringBuffer類。
宣告字串變數:String name;
初始化字串變數:name = "lixiansheng";
String類:
String類的內容和長度不可變,如果對字串進行操作則會生成一個新的例項,不會改變物件例項本身。系統為String類物件分配記憶體時,是按照當前物件所包含的實際字元數分配的。
StringBuffer類:
StringBuffer類處理可變字串,如果要修改一個StringBuffer類的字串,不需要再建立新的字串物件,而是直接操作原有字串。系統為StringBuffer物件分配記憶體時,除了當前字元所佔空間外,還提供一個16字元大小的緩衝區。
String類處理字串
1.字串類的預設構造器:
“String()”是最簡單的構造器,也是系統預設的構造器,是不帶引數的。
String name = new String(); //建立一個空的字串
2.位元組引數的構造器
String(byte[] byte)將位元組陣列中的元素作為字串物件。
byte[] byte = {97, 98, 99};
String str = new String(byte);
輸出結果為: abc
3.獲取指定位元組數的構造器
String(byte[], int begin, int length) 含義為:將位元組陣列中從“begin”指定位置開始到“length”長度結束,獲取其中間的元素作為字串物件。 注意陣列是從0開始的。
byte[] byte = {97,98,99,100,101,102};
String str = new String(byte, 3, 2);
輸出結果為: de
4.將位元組型資料轉換為字符集輸出的構造器
String(byte[] byte, int begin, int length, String chatsName) 含義為:獲取位元組陣列中從第“begin”開始到“length”長度結束字元,形成字串物件,然後按照“charname”字符集輸出。
字符集一般有:“us-ascii”, "iso-8859-1","utf-8","utf-16be","utf-16le","utf-16"等樣式。
byte[] byte = {97,98,99,100,101,102};
String str = new String(byte, 3, 2, "utf-8");
輸出結果為: de
5.字元陣列構造器
String(char[], int begin, int length) 含義為:將位元組陣列中從“begin”指定位置開始到“length”長度結束,獲取其中間的字元連城字串。 注意陣列是從0開始的。
char[] char = {"w", "e", "l", "c", "o", "m", "e"};
String str = new String(char, 3, 4); //從3開始,擷取4位
輸出結果為: come
String類字串處理方法
主要講:字串連結 提取子串 從字串中提取一個指定的字元 字串長度 檢查字串是否相等 查詢特定字串 從基本型別轉換成字串等
1.字串連結
有兩種方法連結字串:一是使用“+”,另一種是使用方法函式concat(String str).
String str1 = "I am"; String str2 = "a tester!"; //使用"+" System.out.println(str1 + " " + str2); //使用concat System.out.println(str1.concat(" ").concat(str2)); 輸出結果: I am a tester! I am a tester!
2.提取子字串
1)“substring(int index)” 是提取從index指定的位置開始,一直到字串最後。
2)“substring(int begin, int end)" 是提取從begin到end位置的字串。
public static void main(String[] args) { String str1 = "I am a tester!"; //substring(int index) System.out.println(str1.substring(7)); //substring(int begin, int end) System.out.println(str1.substring(5,12)); } 輸出結果: tester! a teste
3.從字串中提取一個指定字元
charAt(int index),這個方法返回的是一個字元。
public static void main(String[] args) { String str1 = "I am a tester!"; //獲取位置為3的字元 System.out.println(str1.charAt(3)); } 輸出結果: m
4.獲取字串長度
str.length().返回字串長度,型別為int。注意字串長度length()是方法,陣列長度length是屬性。
public static void main(String[] args) { String str1 = "I am a tester!"; //獲取長度 System.out.println(str1.length()); } 輸出結果: 14
5.檢查字串是否相等
str.equals(str1) 返回true或者false
str.equalsIgnoreCase(str) 這個方法忽略字串大小寫
public static void main(String[] args) { String str1 = "tester"; String str2 = "tester"; String str3 = "Tester"; System.out.println(str1.equals(str2)); System.out.println(str1.equals(str3)); System.out.println(str1.equalsIgnoreCase(str3)); } 輸出結果: true false true
6.查詢特定字元
1)indexOf(子串內容) 子串如果存在str內,則返回首位子串的位置,如子串“sdf”則返回“s”位置;如子串不存在str內,返回負數。
2)startsWith(子串內容) 測試字串是否是子串開頭。
3)endsWith(子串內容)測試字串是否是子串結尾。
public static void main(String[] args) { String str1 = "tester"; System.out.println(str1.indexOf("es")); System.out.println(str1.indexOf("esd")); System.out.println(str1.startsWith("te")); System.out.println(str1.startsWith("a")); System.out.println(str1.endsWith("er")); System.out.println(str1.endsWith("A")); } 輸出結果: 1 -1 true false true false
7.從基本型別轉換成字串
valueOf() 將基本型別資料轉換成相應的字串
int str2= 123;
String str3 = String.valueOf(str2);
StringBuffer快取字串處理類
1.預設構造器
public static void main(String[] args) { StringBuffer str = new StringBuffer(); System.out.println(str.length()); //輸出字串長度 System.out.println(str.capacity()); //輸出字串容量 } 輸出結果: 0 16
2.設定容量大小的構造器
StringBuffer str = new StringBuffer(int x);
擴容:str.ensureCapacity(int x);
public static void main(String[] args) { StringBuffer str = new StringBuffer(10); System.out.println(str.length()); //輸出字串長度 System.out.println(str.capacity()); //輸出字串容量 str.ensureCapacity(40); System.out.println(str.length()); System.out.println(str.capacity()); } 輸出結果: 0 10 0 40
3.處理快取字串
1)初始化字串
public static void main(String[] args) { StringBuffer str = new StringBuffer("老李是名優秀的測試"); str.append("工程師"); //新增到末尾 System.out.println(str); str.setLength(2);//設定字串長度 System.out.println(str); } 輸出結果: 老李是名優秀的測試工程師 老李
2)取字串的單個字元
str.charAt(int index)
StringBuffer str = new StringBuffer("老李是名優秀的測試"); System.out.println(str.charAt(3)); 輸出結果: 名
3)單個字元賦值
str.setCharAt(int index,'字元');
public static void main(String[] args) { StringBuffer str = new StringBuffer("老李是名優秀的測試"); str.setCharAt(0,'小'); System.out.println(str); } 輸出結果: 小李是名優秀的測試
4)指定位置插入字串
str.insert(int index, str)
public static void main(String[] args) { StringBuffer str = new StringBuffer("老李是名優秀的測試"); str.insert(9,"工程師"); System.out.println(str); } 輸出結果: 老李是名優秀的測試工程師
5)返回字串子串
str.substring(int index)
public static void main(String[] args) { StringBuffer str = new StringBuffer("老李是名優秀的測試"); System.out.println(str.substring(7)); } 輸出結果: 測試
6)倒置字串內容
str.reverse()
public static void main(String[] args) { StringBuffer str = new StringBuffer("老李是名優秀的測試"); System.out.println(str.reverse()); } 輸出結果: 試測的秀優名是李老