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