第十章 字符串
1.String類提供了9個構(gòu)造函數(shù),以便使用各種方式初始化String對象。其中的7個如下:
s1=new String();//無參數(shù)構(gòu)造函數(shù);
s2=new String(s);//參數(shù)為字符串的構(gòu)造函數(shù);
s3=new String(charArray);//參數(shù)為字符數(shù)組的函數(shù);
s4=new String(charArray,6,3);//參數(shù)為字符數(shù)組并拷貝以第二個參數(shù)為起始位置,第三個參//數(shù)為拷貝字符數(shù)目作為初始值;
s5=new String(byteArray,4,4);//參數(shù)為比特數(shù)組并拷貝以第二個參數(shù)為起始位置,第三個參數(shù)為拷貝字符數(shù)目作為初始值;
s6=new String(byteArray);//參數(shù)為比特數(shù)組;
s7=new String(buffer);//參數(shù)為StringBuffer;
2.charAt方法返回String中指定位置的字符。如:String1.charAt(i); getChars方法取String的某一子串。如:String1.getChars(0,5,charArray,0);第一個參數(shù)為被拷貝字符串中的起始拷貝的下標(biāo),第二個參數(shù)是被拷貝字符的數(shù)目,第三個參數(shù)為目標(biāo)字符數(shù)組,第四個參數(shù)為拷貝的字符放在字符數(shù)組中的起始下標(biāo)。
3.字符串的比較:equals,equalsIgnoreCase,CompareTo和reginMathes,其中equalsIgnoreCase將忽略大小寫;CompareTo返回0時表示兩個字符串相等,返回-1表示調(diào)用此方法的字符串小于比較的字符串,返回1則相反;reginMathes方法比較兩個字符串對象的一部分是否相等,如:String1.regionMatches(0,s1,0,5);第一個參數(shù)是調(diào)用此方法的字符串的起始下標(biāo),第二個參數(shù)是要比較的字符串,第三個參數(shù)是要比較字符串中的起始下標(biāo),第四個參數(shù)是要比較的字符的個數(shù)。只有當(dāng)指定個數(shù)的字符在按字典中發(fā)比較都相同時,才返回True。
在使用“==“比較引用時,如果兩個引用指向內(nèi)存中的同一個對象,則結(jié)果為true;而在比較基本數(shù)據(jù)類型的指時,如果兩個值相同,則結(jié)果為true。
4.String類的startsWith和endsWith方法用于測試數(shù)組的元素是否以某些字符開始或結(jié)尾。如:string[i].startsWith(“st”); string[i].startsWith(“art”,2)判斷strings中第i個字符串從下標(biāo)2開始的子串是否以字符“art”開始;string[i].endsWith(“ed”);
5.indexOf方法在字符串中定位字符和子串,如:String1.indexOf(‘c’);String1.indexOf(‘a’,1);
其中第二個參數(shù)是在字符串中開始查找的起始下標(biāo)。
6.substring方法用于從字符串中抽取子串,它有兩種形式,如String1.substring(20),其中20是拷貝子串在源字符串中的起始下標(biāo);String1.substring(0,6);第一個參數(shù)指定在源字符串中需拷貝的起始下標(biāo),第二個參數(shù)指定拷貝的字符數(shù)目。
7.String類的其他方法:s1.concat(s2);字符串s1連接s2,并不改變s1,s2;
s1.replace(‘l’,’L’);替換s1中所有的l為L;
s1.toUpperCase(); s1.toLowerCase();分別轉(zhuǎn)換為大寫小寫;
s1.trim(); 刪除s1開頭和末尾的空白字符;
s1.valueOf(l);可以使用多種類型的參數(shù),并將多種類型的參數(shù)轉(zhuǎn)換為字符串;
8.String類的intern方法可以改善字符串比較的性能,在第一次對某個String對象調(diào)用String
類的intern方法時,它將返回一個指向內(nèi)存中該String對象的引用。當(dāng)下次對與原String對象內(nèi)容相同的不同String對象進(jìn)行intern調(diào)用時,將產(chǎn)生對原String對象的多個引用。這樣就可以進(jìn)行高效的大型字符串的比較。一旦調(diào)用過intern方法,就可以用==比較String引用,而不必使用String類的equals等比較方法。
9.StringBuffer類,它可以創(chuàng)建和操縱動態(tài)字符串,即可以修改字符串,每個StringBuffer都能夠存貯由它的容量所指定的一些字符,如果超過了StringBuffer的容量,容量則會自動擴(kuò)大以容納多出來的字符。它的構(gòu)造函數(shù)由3種:buf1=new StringBuffer(); buf2=new StringBuff(6);其中6為初始容量;buf3=new StringBuffer(“hello”);
10.StringBuffer類的capacity方法返回它不另外分配空間可以存儲的字符數(shù)。注意:帶一個字符串參數(shù)的StringBuffer構(gòu)造函數(shù)創(chuàng)建的StringBuffer對象的初始容量為參數(shù)字符串的長度加16。如:buf=new StringBuffer(“hello,how are you?”);返回的capacity為35。
buf.setLength(10);方法將StringBuffer的長度設(shè)置為10,如果指定的長度比當(dāng)前的字符數(shù)目少,則超過指定長度的字符都將被舍棄;如果比當(dāng)前字符數(shù)目多,則添加空字符至指定長度。
buf.ensureCapacity(75);將擴(kuò)充StringBuffer的容量為至少75個字符。
buf.reverse();將倒置buf中的字符;
buf.append(b);將多種類型的數(shù)據(jù)的值添加到StringBuffer的末尾;實(shí)際上編譯器用它實(shí)現(xiàn)了用于連接字符串的“+”和“+=”運(yùn)算符。
buf.insert(0,b); 方法用于將多種類型的數(shù)據(jù)插入到StringBuffer中第一個參數(shù)指定的參數(shù)之前。
buf.delete(2,6);方法將刪除以第一個參數(shù)為起始下標(biāo),第二個參數(shù)為字符數(shù)目的子串。
11.Character類的部分方法:
Character.isDefined(c);判斷字符c在Unicode字符集中是否被定義,如果是則返回true,否則返回false;
Character.isJavaIdentifierPart(c);判斷字符c是否能當(dāng)作Java標(biāo)識符的一部分;
Charater.forDigit(digit,radix);把整數(shù)digit轉(zhuǎn)換為由整數(shù)radix(基數(shù))指定的數(shù)制系統(tǒng)中相應(yīng)的字符。如:Charater.foDigit(13,16)則返回d;
12.StringTokenizer類將字符串分解成組成字符串的語言符號,它的方法coutTokens返回語句符號化的字符串中含有的語句符號的個數(shù);hasMoreTokens方法判斷是否還有語言符號;
nextToken調(diào)用字符串的形式返回下一個語言符號。