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、compareTo方法
該方法的作用是比較兩個字串的大小,比較的原理是依次比較每個字元的字元編碼。首先比較兩個字串的第一個字元,如果第一個字串的字元編碼大於第二個的字串的字元編碼,則返回大於0的值,如果小於則返回小於0的值,如果相等則比較後續的字元,如果兩個字串中的字元編碼完全相同則返回0。
例如:
String s = “abc”;
String s1 = “abd”;
int value = s.compareTo(s1);
則value的值是小於0的值,即-1。
在String類中還存在一個類似的方法compareToIgnoreCase,這個方法是忽略字元的大小寫進行比較,比較的規則和compareTo一樣。例如:
String s = “aBc”;
String s1 = “ABC”;
int value = s. compareToIgnoreCase (s1);
則value的值是0,即兩個字串相等。
c、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。
d、endsWith方法
該方法的作用是判斷字串是否以某個字串結尾,如果以對應的字串結尾,則返回true。
例如:
String s = “student.doc”;
boolean b = s.endsWith(“doc”);
則變數b的值是true。
e、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。</