第一節(jié)、String對(duì)象
一、
Java中將字符串作為String類型對(duì)象來處理。當(dāng)創(chuàng)建一個(gè)String對(duì)象時(shí),被創(chuàng)建的字符串是不能被改變的。每次需要改變字符串時(shí)都要?jiǎng)?chuàng)建一個(gè)新的String對(duì)象來保存新的內(nèi)容。原始的字符串不變。之所以采用這種方法是因?yàn)閷?shí)現(xiàn)固定的,不可變的字符串比實(shí)現(xiàn)可變的字符串更高效。對(duì)于那些想得到改變的字符串的情況,有一個(gè)叫做StringBuffer的String類的友類,它的對(duì)象包含了在創(chuàng)建之后可以改變的字符串。
String類和StringBuffer類都在java.lang中定義。因此它們可以自動(dòng)的被所有程序使用。兩者均被說明為final,這意味著兩者均不含子類。
二、String構(gòu)造函數(shù)
(1)String(), 默認(rèn)構(gòu)造函數(shù),無參數(shù)
String s1 = new String();
(2)String( char chars[]) ,傳入字符數(shù)組
char[] myChars={'a', 'b', 'c'};
String s2 = new String(myChars) // 使用字符串“abc”初始化s2
(3)String( char chars[], int startIndex, int numChars) ,傳入一個(gè)字符數(shù)組,從指定下標(biāo)位置開始獲取指定個(gè)數(shù)的字符,用這些字符來初始化字符串變量。
char[] myChars={'h', 'e', 'l', 'l', 'o'};
String s3 = new String(myChars,1,3); //使用字符串“ell”初始化s3
(4)String(String strObj),傳入另一個(gè)字符串對(duì)象,用該字符串對(duì)象的內(nèi)容初始化
String s4= new String(s3); // 這是s4也是“ell”了。
(5)String(byte asciiChars[])
String(byte asciiChars[], int startIndex, int numChars)
盡管Java的char類型使用16位(bit)表示Unicode編碼字符集,在Internet中,
字符串的典型格式使用由ASCII字符集構(gòu)成的8位數(shù)組,因?yàn)?/span>8位ASCII字符串是共同的,當(dāng)給定一個(gè)字節(jié)(byte)數(shù)組時(shí),String類提供了上面兩個(gè)初始化字符串的構(gòu)造函數(shù)。
例子:
package Examples;
class SubStringConv{
public static void main(String[] args){
byte ascii[]={65,66,67,68,69,70};
String s1=new String(ascii);
System.out.println(s1);
String s2=new String(ascii,2,3);
System.out.println(s2);
}
}
編譯和運(yùn)行后輸出:
ABCDEF
CDE
三、
(1)調(diào)用字符串的length()方法可以得到該字符串的長(zhǎng)度(字符個(gè)數(shù));
(2)前面說明了如何使用new運(yùn)算符創(chuàng)建一個(gè)字符串實(shí)例。然而這是一種早期的使用字符串常量的處理方法。對(duì)于程序中的每一個(gè)字符串常量,Java會(huì)自動(dòng)創(chuàng)建String對(duì)象。因此,可以使用字符串常量初始化String對(duì)象。例如:
String s5="abc";
int i = "abc".length(); //可以將字符串作為對(duì)象來進(jìn)行操作
(3)可以使用“+”運(yùn)算符來將兩個(gè)字符串連接起來產(chǎn)生一個(gè)新的String對(duì)象。只要+運(yùn)算符有一個(gè)運(yùn)算數(shù)是字符串(String)實(shí)例時(shí),編譯器就將另一個(gè)運(yùn)算數(shù)轉(zhuǎn)換為它的字符串形式。這種操作是通過調(diào)用一個(gè)由String類定義的 字符串轉(zhuǎn)換方法valueOf()來完成的。對(duì)于簡(jiǎn)單類型,valueOf()方法返回一個(gè)字符串,該字符串包含了該類型的值的字符串。對(duì)于對(duì)象,valueOf()方法調(diào)用toString()方法。每一個(gè)類都執(zhí)行toString()方法,因?yàn)樗怯?/span>Object定義的。toString()方法具有如下一般形式: String toString() 。 toString()方法返回一個(gè)String對(duì)象(即字符串)。該對(duì)象一般是對(duì)類的一個(gè)描述。
四、一些字符串操作
(1)字符截取
*char charAt(int where) ,注意,這里返回一個(gè)char字符例如:
char a ;
a="abcde".charAt(2); //將索引為2 ,即第三個(gè)字符賦給a
* void getChars(int sourceStart, int sourceEnd, char target[], int targetStart) ,這里是無返回值方法,指定要截取的子字符串的開始和結(jié)束下標(biāo),再指定要儲(chǔ)存子字符串內(nèi)字符的數(shù)組,和存放這些字符的起始位置。注意,子字符串并不包括位于結(jié)束下標(biāo)的字符。
* byte[] getBytes() 這是getBytes()方法最簡(jiǎn)單的形式,它實(shí)現(xiàn)將字符存放于字節(jié)數(shù)組中。在將字符串(String)值輸出到一個(gè)不支持16位Unicode編碼的環(huán)境時(shí),getBytes
()是最有用的。例如,大多數(shù)Internet協(xié)議和文本文件格式在文本交換時(shí)使用8位ASCII編碼。
* char[] toCharArray() 將字符串中所有的字符轉(zhuǎn)換到一個(gè)字符數(shù)組的最簡(jiǎn)當(dāng)方法,也可以使用getChars()方法實(shí)現(xiàn)。
(2)字符串比較
* boolean equals(Object str) 比較兩個(gè)字符串對(duì)象是否相等,
boolean equalsIgnoreCaseJ(String str) 比較兩個(gè)字符串對(duì)象,且忽略字符的大小寫
* regionMatches() 方法允許將一個(gè)字符串中指定的區(qū)間和另一字符串中指定的區(qū)間進(jìn)行比較,它的重載形式允許在比較時(shí)忽略大小寫。下面給出這兩種方法的一般形式:
boolean regionMatches(int startIndex,String str2,int str2StartIndex,int numChars)
boolean regionMatches(boolean ignoreCase ,int startIndex,String str2,int str2StartIndex,int numChars)
其中startIndex指定調(diào)用此方法的字符串內(nèi)子字符串的起始位置。
* boolean startsWith(String str) startsWith方法還有第二種形式:
boolean startWith(String str, int startIndex)
boolean endsWith(String str)
上面的方法用來判斷一個(gè)給定的字符串是否是從指定的字符串開始或結(jié)束。
* int compareTo(String str) 方法用于比較兩個(gè)字符串的大小。字符串比較的結(jié)果及其含義:
值
|
含義
|
小于0
|
調(diào)用此方法的字符串小于參數(shù)str
|
大于0
|
調(diào)用此方法的字符串大于參數(shù)str
|
等于0
|
兩個(gè)字符串相等
|
(3)其他操作
* 搜索字符串:
int indexOf( int ch)
int lastIndexOf( int ch)
int indexOf(String str)
int lastIndexOf(String str)
指定搜索的起始點(diǎn):
int indexOf( int ch, int startIndex)
int lastIndexOf( int ch ,int startIndex)
int indexOf(String str ,int startIndex)
int lastIndexOf(String str, int startIndex)
* 使用 substring()截取子字符串:
String substring(int startIndex) 注意substring中string沒有大寫,截取指定位置后的子字符串。
String substring(int startIndex,int endIndex) 截取指定起始位置和結(jié)束位置的子字符串。注意截取的字字符串不包括結(jié)束位置的字符。
* concat() 連接連個(gè)字符串,與+ 運(yùn)算符執(zhí)行相同功能。
String concat(String str)
* replace() 用另一個(gè)字符取代指定字符串中指定字符:
String replace(char original, char replacement) 例如:
String s=”Hello”.replace(‘l’,’w’); //執(zhí)行后 s =”Hewwo”;
* trim() 返回一個(gè)字符串,該字符串是刪除調(diào)用字符串前后的空白符所得的字符串
* 改變字符串內(nèi)字符的大小寫
String toLowerCase() 返回一個(gè)所有字母都是小寫的字符串
String toUpperCase()返回一個(gè)所有字母都是大寫的字符串
* 使用 valueOf()方法實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換
例如:
String str = String.valueOf(3) ; //將int類型轉(zhuǎn)換成字符串類型,其他基本數(shù)據(jù)類型和任何類的對(duì)象也可作為參數(shù)。
第二節(jié)、StringBuffer
StringBuffer定義了下面三個(gè)構(gòu)造函數(shù):
StringBuffer() // 默認(rèn)構(gòu)造函數(shù),預(yù)留了16個(gè)字符的空間,該空間不需再分配
StringBuffer(int size) // 設(shè)置指定緩沖區(qū)大小
StringBuffer(String str) // 設(shè)置StringBuffer對(duì)象初始化的內(nèi)容并預(yù)留16個(gè)字符空間,且不需再分配空間
* int length()
調(diào)用length()方法可以得到StringBuffer對(duì)象的長(zhǎng)度,調(diào)用capacity()可以得到總的分配容量。兩個(gè)方法都是返回一個(gè)int類型的值。
* void ensureCapacity(int capacity)
如果想在構(gòu)造StringBuffer對(duì)象后為某些字符預(yù)分配空間,可以使用ensureCapacity()方法,設(shè)置緩沖區(qū)的大小,這在事先已知要在StringBuffer上追加大量小字符串的情況下是有用的。ensureCapcity()方法具有如下的一般形式: void ensureCapacity(int capacity)
* void setLength(int len)
使用setLength()方法可以設(shè)置StringBuffer對(duì)象的長(zhǎng)度,它的一般形式如下:
void setLength(int len) 如果len大于StringBuffer對(duì)象當(dāng)前的length()值的話,那么會(huì)在StringBuffer對(duì)象后面加上空字符;如果比length()小的話,則len后面的字符串會(huì)丟失。
* char charAt(int where)
void setCharAt(int where, char ch)
使用charAt()方法可以得到StringBuffer對(duì)象中指定位置上的字符,setCharAt() 可以設(shè)置指定位置上的字符。它們的一般形式如下:
char charAt(int where)
void setCharAt(int where,char ch)
對(duì)于這兩種法法,where值必須是非負(fù)的,同時(shí)不能超過或等于StringBuffer對(duì)象的長(zhǎng)度。
* getChars(int suorceStart,int sourceEnd,char target[] , int targetStart)
* append()
Append()方法將任一其他類型數(shù)據(jù)的字符串形式連接到調(diào)用StringBuffer對(duì)象的后面,對(duì)所有內(nèi)置的類型和Object,它都有重載形式。下面是幾種形式:
StringBuffer append(String str)
StringBuffer append(int num)
StringBuffer append(Object obj)
* insert()
Insert()方法將一個(gè)字符串插入另一個(gè)字符串中。下面是它的幾種形式:
StringBuffer insert(int index,String str)
StringBuffer insert(int index,char ch)
StringBuffer insert(int index,Object obj)
*reverse() // StringBuffer reverse()
StringBuffer strbf=new StringBuffer(“ABCDEFG”);
strbf.reverse();
System.out.println(strbf); //輸出 GFEDCBA
* StringBuffer delete(int startIndex,int endIndex)
StringBuffer deleteCharAt(int loc)
刪除指定位置的字符串和指定位置的字符。例如刪除第一個(gè)字符后的所有字符:
strbf.delete(1,strbf.length());
* replace()
它完成在StringBuffer內(nèi)部用一個(gè)字符串代替另一個(gè)指定起始位置和結(jié)束位置的字符串的功能,注意的是,被代替的字符不包括結(jié)束位置上的字符,它的一般形式是,:
StringBuffer replace(int startIndex, int endIndex,String str)
* substring() 返回StringBuffer的一部分值
String substring(int startIndex)
String substring(int startIndex, int endIndex)
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=610794