字符串相關(guān)的處理類
目錄導(dǎo)讀
String
StringBuffer(線程安全) 1.0出現(xiàn)
StringBuilder(線程不安全) 1.5出現(xiàn)
數(shù)組與StringBuffer/StringBuilder的區(qū)別
1.String 類
是不可變類,即一旦一個(gè)String對(duì)象被創(chuàng)建之后,該對(duì)象中的字符序列就不可被改變,直至該對(duì)象被銷毀
適合用于數(shù)據(jù)共享的場(chǎng)合
(1)構(gòu)造器
public String();
public String(byte[] bytes);
public String(byte[] bytes, int index, int length);
public String(char[] chs);
public String(char[] chs, int index, int length);
public String(String original); //String s = new String("hello");
public String(StringBuffer buffer);
public String(StringBuilder builder);
(2)判斷功能
1.是否相等
public boolean equals(Object obj); //比較內(nèi)容,區(qū)分大小寫(xiě),因?yàn)镾tring重寫(xiě)了equals方法
public boolean equalsIgnoreCase(String s); //不區(qū)分大小
2.是否包含
public boolean contains(String s); //是否包含
3.是否是特定開(kāi)頭
boolean startsWith(String prefix); //是否以prefix開(kāi)頭
boolean startsWith(String prefix, int toffset); //從toffset后開(kāi)始是否以prefix開(kāi)頭
4.是否是特定結(jié)尾
boolean endsWith(String str); //是否以str結(jié)尾
5.叛空
boolean isEmpty(); //是否為空
(3)獲取功能
1.長(zhǎng)度
public int length();
2.特定位置的字符
public char charAt(int index); //獲取index 處的字符
3.特定字符首次出現(xiàn)的位置
public int indexOf(int ch); //返回特定字符(這里用其ASCII值做參數(shù))在該字符串中第一次出現(xiàn)的位置
注意:這里把參數(shù)類型限制為int而不是char類型,是為了防止發(fā)生強(qiáng)制類型轉(zhuǎn)換造成精度損失
public int indexOf(int ch, int fromIndex);
public int indexOf(String str); //返回字符串在此字符中第一次出現(xiàn)的位置
public int indexOf(String str, int fromIndex) ;
4.截取功能
public String substring(int start); //從start處開(kāi)始截取至末尾。包含start
public String substring(int start, int end); //截取該范圍內(nèi)的[start, end)字符串
(4)轉(zhuǎn)換功能
1.類型轉(zhuǎn)換
public char[] toCharArray(); //String ——> char[]
public static String valueOf(X x); //是static方法,將任意類型轉(zhuǎn)換為String, 任意類型包括基本類型和對(duì)象類型
public byte[] getBytes(); //String ——> byte[]
public void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin); //部分轉(zhuǎn)換
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin); //部分轉(zhuǎn)換
2.大小寫(xiě)轉(zhuǎn)換
public String toLowerCase(); //轉(zhuǎn)小寫(xiě)
public String toUpperCase(); //轉(zhuǎn)大寫(xiě)
3.拼接
public String concat(String str); //拼接字符串
(5)替換功能
public String replace(char old, char newChar); //針對(duì)字符
public String replace(String old, String newString); //針對(duì)字符串
(6)去掉字符串兩端的空格
public String trim(); //只能去掉兩端處的空格,之間位置的不行
注意:由于String是不可變類,所以很容易產(chǎn)生一些額外的臨時(shí)變量,消耗過(guò)多的內(nèi)存
資源,因此,使用StringBuffer、StringBuilder就可以避免這個(gè)問(wèn)題
2.StringBuffer / StringBuilder 類
這兩個(gè)對(duì)象代表一個(gè)字符串序列可變。
適合用于數(shù)據(jù)內(nèi)容被頻繁修改的場(chǎng)合
區(qū)別在于 StringBuffer 是線程安全的,因此效率不高
StringBuilder 是線程不安全的,因此效率較高,故一般用StringBuilder
二者的方法用法基本一樣,只介紹StringBuffer,另一種類推
(1)構(gòu)造器
public StringBuffer(); //默認(rèn)出事容量,16個(gè)字符,第一次擴(kuò)容(+18),第二次以后擴(kuò)容 +1
public StringBuffer(int capacity); //指定容量capacity,第一次擴(kuò)容(capacity+2),第二次以后擴(kuò)容 +1
public StringBuffer(String str); //指定內(nèi)容的StringBuffer
(2)反轉(zhuǎn)功能
public StringBuffer reverse(); //將字符串倒序
(3)獲取功能
1.長(zhǎng)度
public int capacity(); //返回當(dāng)前容量,理論值為16(默認(rèn)情況下)
public int length(); //返回實(shí)際長(zhǎng)度
2.截取功能
public String substring(int start); //從start處截取值末尾,存儲(chǔ)在新的String中
public String substring(int start, int end); //截取[start, end)間的字符,存儲(chǔ)在新的String中
注意:這兩個(gè)方法執(zhí)行后,原來(lái)的StrignBuffer里的內(nèi)容并沒(méi)有發(fā)生任何變化
(4)添加功能
public StringBuffer append(X x); //追加x在原始字符串后(即在原緩沖區(qū)對(duì)象里修改)
注:X可以為任何類型的數(shù)據(jù),甚至可以是Obejct類的對(duì)象
public StringBuffer insert(int offset, String str); //在offset處插入數(shù)據(jù)
(5)刪除功能
public StringBuffer deletCharAt(int index); //刪除指定位置的字符
public StringBuffer delete(int start, int end); //刪除[start, end)位置的字符
(6)替換功能
public StringBuffer replace(int start, int end, String str); //str替換[start, end)處的字符
(7)轉(zhuǎn)換
1.StringBuffer -> String
public String toString();
2.String -> StringBuffer
public StringBuffer(String str); //指定內(nèi)容的StringBuffer
3.數(shù)組與StringBuffer/StringBuilder的區(qū)別
(1)二者均為容器,用來(lái)存放數(shù)據(jù)
(2)StringBuffer/StringBuilder的數(shù)據(jù)最終是一個(gè)字符串?dāng)?shù)據(jù)(里面可以存放多種不同類型的數(shù)據(jù))
每一個(gè)具體的數(shù)組中只能存放一種類型的數(shù)據(jù)
(3)數(shù)組的長(zhǎng)度是固定不變的,StringBuffer/StringBuilder的長(zhǎng)度可變
注意:數(shù)組在Java中是一種對(duì)象(因?yàn)镴ava中的數(shù)組擁有自己的屬性,如length,還有方法如clone()等),但在C/C++中數(shù)組名只是一個(gè)指針,沒(méi)有屬性和方法