更新時(shí)間:2020-01-08 來(lái)源:黑馬程序員 瀏覽量:
在應(yīng)用程序中經(jīng)常會(huì)用到字符串,所謂字符串就是指一連串的字符,它是由許多單個(gè)字符連接而成的,如多個(gè)英文字母所組成的一個(gè)英文單詞。字符串中可以包含任意字符,這些字符必須包含在一對(duì)雙引號(hào)“”之內(nèi),例如“ab”。在Java中定義了String和StringBuffer兩個(gè)類(lèi)來(lái)封裝字符串,并提供了一系列操作字符串的方法,它們都位于java.lang包中,因此不需要導(dǎo)包就可以直接使用。下面我們?cè)敿?xì)介紹String類(lèi)。
String類(lèi)的初始化
在操作String類(lèi)之前,首先需要對(duì)String類(lèi)進(jìn)行初始化,在Java中可以通過(guò)以下兩種方式對(duì) String類(lèi)進(jìn)行初始化,具體如下。
1. 使用字符串常量直接初始化一個(gè)String對(duì)象,具體代碼如下:
String strl="abc";
由于String類(lèi)比較常用,所以提供了這種簡(jiǎn)化的語(yǔ)法,用于創(chuàng)建并初始化String對(duì)象,其中“abc”表示一個(gè)字符串常量。
2. 使用String的構(gòu)造方法初始化字符串對(duì)象,String類(lèi)的構(gòu)造方法下表所示。
方法聲明 |
功能描述 |
String() |
創(chuàng)建一個(gè)內(nèi)容為空的字符串 |
String(char[] vaule) |
根據(jù)指定的字符組創(chuàng)建對(duì)象 |
String(String value) |
根據(jù)指定的字符串內(nèi)容創(chuàng)建對(duì)象 |
上面表中列出了String類(lèi)的三種構(gòu)造方法,通過(guò)調(diào)用不同參數(shù)的構(gòu)造方法便可完成String類(lèi)的初始化。接下來(lái)通過(guò)一個(gè)案例來(lái)演示。
public class string01 {
public static void main(String[] args) throws Exception {
//創(chuàng)建一個(gè)空對(duì)象、
String str1=new String();
//創(chuàng)建一個(gè)內(nèi)容為abcd的字符串
String str2=new String("abcd");
//創(chuàng)建一個(gè)內(nèi)容為字符數(shù)組的字符串
char[] charArray=new char[]{'D','E','F'};
String str3=new String(charArray);
System.out.println("a"+str1+"b");
System.out.println(str2);
System.out.println(str3);
}
}
運(yùn)行結(jié)果:
String類(lèi)的常見(jiàn)操作匯總
String類(lèi)在實(shí)際開(kāi)發(fā)中的應(yīng)用非常廣泛,因此靈活地使用String類(lèi)是非常中要的。下面我們介紹String類(lèi)常用類(lèi)的一些方法。
int indexOf(int ch)
功能:返回指定字符在此字符串中第一次出現(xiàn)處的索引
int lastIndexOf(int ch)
功能:返回指定字符在此字符串中最后一次出現(xiàn)處的索引
char charAt(int index)
功能:返回字符串中index位置上的字符,其中index的取值范圍是:0~(字符串長(zhǎng)度-1)
boolean endsWith(String suffix)
功能:判斷此字符串是否以指定的字符串結(jié)尾
int length()
功能:返回此字符串的長(zhǎng)度
boolean equals(Object anObject)
功能:將此字符串與指定的字符串比較
boolean isEmpty()
功能:當(dāng)且僅當(dāng)字符串長(zhǎng)度為0時(shí)返回true
boolean startsWith(String prefix)
功能:判斷此字符串是否以指定的字符串開(kāi)始
boolean contains(CharSequence cs)
功能:判斷此字符申中是否包含指定的字符序列
String toLowerCase()
功能:使用默認(rèn)語(yǔ)言環(huán)境的規(guī)則將String中的所有字符都轉(zhuǎn)換為小寫(xiě)
String toUpperCase()
功能:使用默認(rèn)語(yǔ)言環(huán)境的規(guī)則將String中的所有字符都轉(zhuǎn)換為大寫(xiě)
String valueOf(int i)
功能:返回int參數(shù)的字符表現(xiàn)形式
char[] toCharArray()
功能:將此字符串轉(zhuǎn)化為一個(gè)字符數(shù)組
String repalce(CharSequence oldstr,CharSequence newstr)
功能:返回一個(gè)新的字符串,它是通過(guò)用newstr替換此字符串中出現(xiàn)的所有oldstr得到的
String[] split(String regex)
功能:根據(jù)參數(shù)regex將原來(lái)的字符串分割為若干個(gè)子字符串
String substring(int beginIndex)
功能:返回一個(gè)新字符串,它包含字符串中索引beginIndex后的所有字符
String substring(int beginIndex,int endIndex)
功能:返回一個(gè)新字符串,它包含此字符串中從索引beginIndex到索引endIndex之間的所有字符。
String trim()
功能:返回一個(gè)新字符串,它去除了原字符串首尾的空格
上面我們列出了String類(lèi)的常見(jiàn)方法,其中有些方法無(wú)法通過(guò)描述解釋清楚,下面我們就通過(guò)實(shí)例來(lái)具體學(xué)習(xí)。
1、字符串的基本操作
在程序中,需要對(duì)字符串進(jìn)行一些基本操作,如獲得字符串長(zhǎng)度、獲得指定位置的字符等。 String類(lèi)針對(duì)每一個(gè)操作都提供了對(duì)應(yīng)的方法,接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)下這些方法的使用。
public class string02 {
public static void main(String[] args) {
String s="abcdedcba"; //聲明字符串
System.out.print("字符串的長(zhǎng)度為:"+s.length()); //獲取字符串的長(zhǎng)度,即字符個(gè)數(shù)
System.out.println("字符串中第一個(gè)字符:"+s.charAt(0));
System.out.println("字符c第一次出現(xiàn)的位置:"+s.indexOf('c'));
System.out.println("字符c最后一次出現(xiàn)的位置:"+s.lastIndexOf('c'));
}
}
運(yùn)行結(jié)果如下:
2、字符串的轉(zhuǎn)換操作
程序開(kāi)發(fā)中,經(jīng)常需要對(duì)字符串進(jìn)行轉(zhuǎn)換操作,例如將字符串轉(zhuǎn)換成數(shù)組的形式,將字符串中的字符進(jìn)行大小寫(xiě)轉(zhuǎn)換等。接下來(lái)通過(guò)一個(gè)案例來(lái)演示字符串的轉(zhuǎn)換操作。
public class string03 {
public static void main(String[] args) {
String str="abcd";
System.out.print("將字符串轉(zhuǎn)為字符串?dāng)?shù)組的結(jié)果");
char[] charArray=str.toCharArray(); //字符串轉(zhuǎn)為字符組
for(int i=0;i<charArray.length;i++){
if (i !=charArray.length-1){
//如果不是數(shù)組的最后一個(gè)元素,在元素后面加逗號(hào)
System.out.print(charArray[i]+",");
}else{
//數(shù)組的最后一個(gè)元素后面不加逗號(hào)
System.out.println(charArray[i]);
}
}
System.out.println("將int值轉(zhuǎn)為String類(lèi)型之后的結(jié)果"+String.valueOf(12));
System.out.println("將字符轉(zhuǎn)換成大寫(xiě)之后的結(jié)果"+str.toUpperCase());
}
}
運(yùn)行結(jié)果如下:
在上面例子中,使用String類(lèi)的toCharArray()方法將一個(gè)字符串轉(zhuǎn)為一個(gè)字符數(shù)組,靜態(tài)方法 valueOf()將一個(gè)int類(lèi)型的整數(shù)轉(zhuǎn)為字符串,toUpperCase()方法將字符串中的字符都轉(zhuǎn)為大寫(xiě)。其中valueOf()方法有很多重載的形式,float、double、char等其他基本類(lèi)型的數(shù)據(jù)都可以通過(guò)該方法轉(zhuǎn)為String字符串類(lèi)型。
3、字符串的替換和去除空格的方法
程序開(kāi)發(fā)中,用戶輸入數(shù)據(jù)時(shí)經(jīng)常會(huì)有一些錯(cuò)誤和空格,這時(shí)可以使用String類(lèi)的replace()和trim()方法,進(jìn)行字符串的替換和去除空格操作,接下來(lái)通過(guò)一個(gè)案例來(lái)介紹。
public class string04 {
public static void main(String[] args) {
String s="itcast";
//字符串替換操作
System.out.println("將it替換成cn.it的結(jié)果:"+s.replace("it","cn.it"));
//去除字符串空格操作
String s1=" i t c a s t ";
System.out.println("去除字符串中兩端的空格后的結(jié)果:"+s1.trim());
System.out.println("去除字符串所空格的結(jié)果:"+s1.replace(" ",""));
}
}
運(yùn)行結(jié)果為:
上面案例中調(diào)用了String類(lèi)的兩個(gè)方法,其中replace()方法用于將字符串中所有與指定字符串匹配的子串替換成另一個(gè)字符串,trim()方法用于去除字符串中的空格。需要注意的是,該方法只能去除兩端的空格,不能去除中間的空格。若想去除字符串中間的空格,則可以調(diào)用String類(lèi)的 replace()方法。
4、字符串的判斷操作
操作字符串時(shí),經(jīng)常需要對(duì)字符串進(jìn)行一些判斷,如判斷字符串是否以指定的字符串開(kāi)始、結(jié)束,是否包含指定的字符串,字符串是否為空等。在String類(lèi)中針對(duì)字符串的判斷操作提供了很多方法,接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)。
public class string05_1 {
public static void main(String[] args) {
String s1="String";
String s2="Str";
System.out.println("判斷是否以字符串str開(kāi)頭:"+s1.startsWith("Str"));
System.out.println("判斷是否以字符串ng結(jié)尾:"+s1.endsWith("ng"));
System.out.println("判斷是否以包含字符串tri:"+s1.contains("tri"));
System.out.println("判斷字符串是否為空:"+s1.isEmpty());
System.out.println("判斷兩個(gè)字符串是否相等:"+s1.equals("s2"));
}
}
運(yùn)行結(jié)果如下:
上面案例中涉及到的方法都是用于判斷字符串的,并且返回值均為boolean類(lèi)型。其中,equals()方法比較重要,該方法將父類(lèi)Object中equals()方法進(jìn)行了重寫(xiě)。在程序中可以通過(guò)和equals()兩種方式對(duì)字符串進(jìn)行比較,但這兩種方式有明顯的區(qū)別。equals()方法用于比較兩個(gè)字符串中的字符是否相等,==方法用于比較兩個(gè)字符串對(duì)象的地址是否相同。對(duì)于兩個(gè)字符串對(duì)象,當(dāng)它們的字符內(nèi)容完全相同時(shí),使用equals判斷結(jié)果會(huì)為true,但使用==判斷時(shí),結(jié)果一定為false。為了便于理解,下面給出示例代碼:
public class string05_2 {
public static void main(String[] args) {
String str1=new String("abc");
String str2=new String("abc");
System.out.println(str1==str2); //結(jié)果為false,因?yàn)閟tr1和str2是兩個(gè)對(duì)象
System.out.println(str1.equals(str2)); //結(jié)果為true,應(yīng)為str1和str2字符內(nèi)容相同
}
}
運(yùn)行結(jié)果為:
5、字符串的截取和分隔
在String類(lèi)中針對(duì)字符串的截取和分割操作提供了兩個(gè)方法,其中,substring()方法用于截取字符串的一部分,split()方法可以將字符串按照某個(gè)字符進(jìn)行分割。接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)。
public class string06 {
public static void main(String[] args) {
String str="羽毛球-籃球-乒乓球";
//下面是字符串截取操作
System.out.println("從第5個(gè)字符截取到末尾的結(jié)果:"+str.substring(4));
System.out.println("從第5個(gè)字符截取到第6個(gè)字符的結(jié)果:"+str.substring(4,6));
//下面是字符分隔操作
System.out.print("分隔后的字符串?dāng)?shù)組中的元素一次為:");
String[] strArray=str.split("-"); //將字符串轉(zhuǎn)換為字符串?dāng)?shù)組
for (int i=0;i<strArray.length;i++){
if (i !=strArray.length-1) {
//如果不是數(shù)組最后一個(gè)元素,在元后面加逗號(hào)
System.out.print(strArray[i]+",");
} else {
//數(shù)組的最后一個(gè)元素后面不加逗號(hào)
System.out.println(strArray[i]);
}
}
}
}
運(yùn)行結(jié)果為:
上面案例中。調(diào)用了String類(lèi)中重載的兩個(gè)substring()方法。在第5行代碼調(diào)用substring()方法時(shí),傳入?yún)?shù)4,即截取字符串中第5個(gè)字符以及之后的所有字符,因?yàn)樽址械淖址?,索引是?開(kāi)始的。第6行代碼調(diào)用substring()方法時(shí)傳入兩個(gè)參數(shù)4和6,即截取第5個(gè)和第6個(gè)字符,因?yàn)樽址诮厝r(shí),只包括開(kāi)始索引,不包括結(jié)束索引。上面案例中的第9~18行演示了split()方法的用法,該方法會(huì)根據(jù)指定的符號(hào)將字符串分割成三部分,并存放到一個(gè)String類(lèi)型的數(shù)組當(dāng)中。
String宇符串在獲取某個(gè)字符時(shí),會(huì)用到字符的索引,當(dāng)訪問(wèn)字符串中的字符時(shí),如果字符的索引不存在,則會(huì)發(fā)生StringIndexOutOfBoundsException(字符串角標(biāo)越界異常),接下來(lái)通過(guò)一個(gè)案例來(lái)演示。
public class string07 {
public static void main(String[] args) {
String s="abcdedsba";
System.out.println(s.charAt(9));
}
}
運(yùn)行結(jié)果為:
通過(guò)運(yùn)行結(jié)果可以看出,訪問(wèn)字符串中的字符時(shí),不能超出字符的索引范圍,否則會(huì)出現(xiàn)異常,這與數(shù)組中的角標(biāo)越界異常非常相似。
猜你喜歡:
java培訓(xùn)課程
java基礎(chǔ)教程下載
java中字符串的截取和分隔[java學(xué)習(xí)筆記](méi)
2020-01-08java中字符串的替換和去除空格的方法[java學(xué)習(xí)筆記](méi)
2020-01-08Java字符串如何轉(zhuǎn)換大小寫(xiě)?
2020-01-08java String類(lèi)的常見(jiàn)操作匯總【java學(xué)習(xí)筆記】
2020-01-08Java String類(lèi)如何初始化?[java培訓(xùn)]
2020-01-08知識(shí)產(chǎn)品經(jīng)理需要掌握什么知識(shí)?
2020-01-06