字符串
在Java中系統定義了兩種類型的字符串類:String
和StringBuffer
String類對象的值和長度都不能改變,稱為常量字符串類,其中每個值稱為常量字符串。
StringBuffer類對象的值和長度都可以改變,稱為變量字符串類,其中每個值稱為可變字符串。
一個用雙引號括起來的字符串屬于String類的一個對象,通過new運算和String類的構造函數能夠創建一個String類的實例對象。String 類的構造函數是一個重載函數,它可以不帶任何參數。此時將創建一個空的字符串,該字符串中不包含任何字符。
它可以帶有一個String類對象的參數,此時將創建與此對象值相同的字符串。還可以帶有一個字符數組參數,此時將創建與此字符數組值相同的字符串實例對象。
例如:
String s=new String();
String r=new String("Apple");
String w="Apple";
String t=new String(r);
char []a={'a','b','c','d','e','f'};
String ss=new String(a);
String sss=new String(a,2,3); //sss="cde"
如果直接使用給字符串賦值常量字符串而不調用構造函數的方式,如:String s1="China";
則會將“China”
放入內存池中,如果在后面再定義String s2="China"
則s1和s2指向同一個位置,他們的指針值都是相同的,但是如果使用構造函數例如String s3=new String("China");
的話則s3的值和s1、s2不同。
直接賦值的方法相當于再字符串池李尋找是否有相同內容的字符串,如果沒有就將新對象放入內存池中,否則就使用內存池中已經存在的字符串。而用new的話會分配新的內存。
如果想要判斷兩個字符串的值是否相同可以使用字符串成員函數equal
來進行判斷,如果直接使用判等符號==
的話判斷的是指針值是否相同,這個值一般都是不同的。例如:s1.equal(s3)
會返回真值。
成員函數:
int length()
返回當前字符串的長度,即字符個數char charAt(int i)
返回字符串中序號為i的字符,序號從0開始。int indexOf(String s)
從當前字符串對象中查找子字符串s,若找到則返回第一個字符的位置序號,否則返回-1。int indexOf(String str, int fromIndex)
從指定的索引處開始,返回第一次出現的指定子字符串在該字符串中的索引。String substring(int i, int j)
返回當前字符串對象中從序號i開始的、到序號j-1結束的一個子字符串對象,長度為j-i。String concat(String s)
返回當前字符串與參數串s進行首尾連接后的串。與加號(+)連接相同。如 s1.concat(s2)等于s1+s2String replace(char x, char y)
返回把當前串中的x字符 替換為y字符后得到的字符串對象。如:“abcda”.replace(‘a’, ‘f’),返回值為"fbcdf"int compareTo(String s)
返回當前串與參數串s的比較結果,當s較小則返回正數,當s較大則返回負數,相等返0。boolean equals(Object s)
判斷當前串與參數串s是否相等,若相等則返回邏輯值真true,否則返回假false。String toString()
返回當前字符串對象。如s.toString()返sString trim()
返回從當前字符串中去掉首部和尾部空白字符后的字符串,空格、回車、換行、制表符等都是空白字符。String toLowerCase()
返回把當前串中的全部大寫字母變為小寫字母后得到的字符串。如"ABbcd".toLowerCase()返"abbcd"String toUpperCase()
返回把當前串中的全部小寫字母變為大寫字母后得到的字符串。如"ABbcd".toUpperCase()返"ABBCD"
String
內封裝的是不可變的字符串,如果要將其進行一些處理,就必須得到返回值。
StringBuffer
類就可以避免這個問題,StringBuffer
類對可變字符串進行處理,可以調用函數進行字符串操作。
StringBufferappend(各種類型)
在字符串末尾添加各種類型StringBuffer insert(int offset, 各種類型)
在某個位置添加各種類型deleteCharAt(int index) / StringBuffer delete(int start, int end)
刪除字符或者某一段字符串