String類常用方法
1、String物件的初始化
由於String物件特別常用,所以在對String物件進行初始化時,Java提供了一種簡化的特殊語法,格式如下:
String s = “abc”;
s = “Java語言”;
其實按照面向物件的標準語法,其格式應該為:
String s = new String(“abc”);
s = new String(“Java語言”);
只是按照面向物件的標準語法,在記憶體使用上存在比較大的浪費。例如String s = new String(“abc”);實際上建立了兩個String物件,一個是”abc”物件,儲存在常量空間中,一個是使用new關鍵字為物件s申請的空間。
其它的構造方法的引數,可以參看String類的API文件。
2、字串的常見操作
a、charAt方法
該方法的作用是按照索引值(規定字串中第一個字元的索引值是0,第二個字元的索引值是1,依次類推),獲得字串中的指定字元。例如:
String s = “abc”;
char c = s.chatAt(1);
則變數c的值是’b’。
b、concat方法
該方法的作用是進行字串的連線,將兩個字串連線以後形成一個新的字串。例如:
String s = “abc”; String s1 = “def”; String s2 = s.concat(s1);
則連線以後生成的新字串s2的值是”abcdef”,而字串s和s1的值不發生改變。如果需要連線多個字串,可以使用如下方法:
String s = “abc”;
String s1 = “def”;
String s2 = “1234”;
String s3 = s.concat(s1).concat(s2);
則生成的新字串s3的值為”abcdef1234”。
其實在實際使用時,語法上提供了一種更簡單的形式,就是使用“+”進行字串的連線。例如:
String s = “abc” + “1234”;
則字串s的值是”abc1234”,這樣書寫更加簡單直觀。
而且使用“+”進行連線,不僅可以連線字串,也可以連線其他型別。但是要求進行連線時至少有一個參與連線的內容是字串型別。而且“+”匹配的順序是從左向右,如果兩邊連線的內容都是基本數字型別則按照加法運算,如果參與連線的內容有一個是字串才按照字串進行連線。
例如:
int a = 10;
String s = “123” + a + 5;
則連線以後字串s的值是“123105”,計算的過程為首先連線字串”123”和變數a的值,生成字串”12310”,然後使用該字串再和數字5進行連線生成最終的結果。
而如下程式碼:
int a = 10;
String s = a + 5 + “123”;
則連線以後字串s的值是”15123”,計算的過程為首先計算a和數字5,由於都是數字型則進行加法運算或者數字值15,然後再使用數字值15和字串”123”進行連接獲得最終的結果。
而下面的連線程式碼是錯誤的:
int a = 12;
String s = a + 5 + ‘s’;
因為參與連線的沒有一個字串,則計算出來的結果是數字值,在賦值時無法將一個數字值賦值給字串s。
c、equals方法
該方法的作用是判斷兩個字串物件的內容是否相同。如果相同則返回true,否則返回false。例如:
String s = “abc”;
String s1 = new String(“abc”);
boolean b = s.equals(s1);
而使用“==”比較的是兩個物件在記憶體中儲存的地址是否一樣。例如上面的程式碼中,如果判斷:
boolean b = (s == s1);
則變數b的值是false,因為s物件對應的地址是”abc”的地址,而s1使用new關鍵字申請新的記憶體,所以記憶體地址和s的”abc”的地址不一樣,所以獲得的值是false。
在String類中存在一個類似的方法equalsIgnoreCase,該方法的作用是忽略大小寫比較兩個字串的內容是否相同。例如:
String s = “abc”;
String s1 =”ABC”;
boolean b = s. equalsIgnoreCase (s1);
則變數b的值是true。
d、indexOf方法
該方法的作用是查詢特定字元或字串在當前字串中的起始位置,如果不存在則返回-1。例如:
String s = “abcded”;
int index = s.indexOf(‘d’);
int index1 = s.indexOf(‘h’);
則返回字元d在字串s中第一次出現的位置,數值為3。由於字元h在字串s中不存在,則index1的值是-1。
當然,也可以從特定位置以後查詢對應的字元,例如:
int index = s.indexOf(‘d’,4);
則查詢字串s中從索引值4(包括4)以後的字元中第一個出現的字元d,則index的值是5。
由於indexOf是過載的,也可以查詢特定字串在當前字串中出現的起始位置,使用方式和查詢字元的方式一樣。
另外一個類似的方法是lastIndexOf方法,其作用是從字串的末尾開始向前查詢第一次出現的規定的字元或字串,例如:
String s = “abcded”;
int index = s. lastIndexOf(‘d’);
則index的值是5。
e、length方法
該方法的作用是返回字串的長度,也就是返回字串中字元的個數。中文字元也是一個字元。例如:
String s = “abc”;
String s1 = “Java語言”;
int len = s.length();
int len1 = s1.length();
則變數len的值是3,變數len1的值是6。
f、replace方法
該方法的作用是替換字串中所有指定的字元,然後生成一個新的字串。經過該方法呼叫以後,原來的字串不發生改變。例如:
String s = “abcat”;
String s1 = s.replace(‘a’,’1’);
該程式碼的作用是將字串s中所有的字元a替換成字元1,生成的新字串s1的值是”1bc1t”,而字串s的內容不發生改變。
如果需要將字串中某個指定的字串替換為其它字串,則可以使用replaceAll方法,例如:
String s = “abatbac”;
String s1 = s.replaceAll(“ba”,”12”);
該程式碼的作用是將字串s中所有的字串”ab”替換為”12”,生成新的字串”a12t12c”,而字串s的內容也不發生改變。
如果只需要替換第一個出現的指定字串時,可以使用replaceFirst方法,例如:
String s = “abatbac”;
String s1 = s. replaceFirst (“ba”,”12”);
該程式碼的作用是隻將字串s中第一次出現的字串”ab”替換為字串”12”,則字串s1的值是”a12tbac”,字串s的內容也不發生改變。
j、substring方法
該方法的作用是取字串中的“子串”,所謂“子串”即字串中的一部分。例如“23”是字串“123”的子串。
字串“123”的子串一共有6個:”1”、”2”、”3”、”12”、”23”、”123”。而”32”不是字串”123”的子串。
例如:
String s = “Test”;
String s1 = s.substring(2);
則該程式碼的作用是取字串s中索引值為2(包括)以後的所有字元作為子串,則字串s1的值是”st”。
如果數字的值和字串的長度相同,則返回空字串。例如:
String s = “Test”;
String s1 = s.substring(4);
則字串s1的值是””。
如果需要取字串內部的一部分,則可以使用帶2個引數的substring方法,例如:
String s = “TestString”;
String s1 = s.substring(2,5);
則該程式碼的作用是取字串s中從索引值2(包括)開始,到索引值5(不包括)的部分作為子串,則字串s1的值是”stS”。
下面是一個簡單的應用程式碼,該程式碼的作用是輸出任意一個字串的所有子串。程式碼如下:
String s = “子串示例”;
int len = s.length(); //獲得字串長度
for(int begin = 0;begin < len – 1;begin++){ //起始索引值
for(int end = begin + 1;end <= len;end++){ //結束索引值
System.out.println(s.substring(begin,end));
}
}
在該程式碼中,迴圈變數begin代表需要獲得的子串的起始索引值,其變化的區間從第一個字元的索引值0到倒數第二個字串的索引值len -2,而end代表需要獲得的子串的結束索引值,其變化的區間從起始索引值的後續一個到字串長度。通過迴圈的巢狀,可以遍歷字串中的所有子串。
h、toCharArray方法
該方法的作用和getBytes方法類似,即將字串轉換為對應的char陣列。例如:
String s = “abc”;
char[] c = s.toCharArray();
則字元陣列c的值為:{‘a’,’b’,’c’}。
i、valueOf方法
該方法的作用是將其它型別的資料轉換為字串型別。需要注意的是,基本資料和字串物件之間不能使用以前的強制型別轉換的語法進行轉換。
另外,由於該方法是static方法,所以不用建立String型別的物件即可。例如:
int n = 10;
String s = String.valueOf(n);
則字串s的值是”10”。雖然對於程式設計師來說,沒有發生什麼變化,但是對於程式來說,資料的型別卻發生了變化。
介紹一個簡單的應用,判斷一個自然數是幾位數字的邏輯程式碼如下:
int n = 12345;
String s = String.valueOf(n);
int len = s.length();
則這裡字串的長度len,就代表該自然數的位數。這種判斷比數學判斷方法在邏輯上要簡單一些。