如今,問你一個問題:你的第一個程序的功能是什麼?讓咱們一塊兒回憶一下,searching.......應該是——「Hello world!」吧,全部的語言在邁向世界的第一次問好。好了,主題——字符串。數組
1、初始化:ide
因爲String對象特別經常使用,因此在對String對象進行初始化時,Java提供了一種簡化的特殊語法,格式以下:編碼
String s = 「abc」;spa
s = 「Java語言」;對象
其實按照面向對象的標準語法,其格式應該爲:索引
String s = new String(「abc」);內存
s = new String(「Java語言」);文檔
只是按照面向對象的標準語法,在內存使用上存在比較大的浪費。例如String s = new String(「abc」);實際上建立了兩個String對象,一個是」abc」對象,存儲在常量空間中,一個是使用new關鍵字爲對象s申請的空間。字符串
其它的構造方法的參數,能夠參看String類的API文檔。string
二、字符串的常見操做
1、charAt方法
該方法的做用是按照索引值(規定字符串中第一個字符的索引值是0,第二個字符的索引值是1,依次類推),得到字符串中的指定字符。例如:
String s = 「abc」;
char c = s.chatAt(1);
則變量c的值是’b’。
2、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,即兩個字符串相等。
3、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。
4、endsWith方法
該方法的做用是判斷字符串是否以某個字符串結尾,若是以對應的字符串結尾,則返回true。
例如:
String s = 「student.doc」;
boolean b = s.endsWith(「doc」);
則變量b的值是true。
5、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。
6、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。
7、length方法
該方法的做用是返回字符串的長度,也就是返回字符串中字符的個數。中文字符也是一個字符。例如:
String s = 「abc」;
String s1 = 「Java語言」;
int len = s.length();
int len1 = s1.length();
則變量len的值是3,變量len1的值是6。
8、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的內容也不發生改變。
9、split方法
該方法的做用是以特定的字符串做爲間隔,拆分當前字符串的內容,通常拆分之後會得到一個字符串數組。例如:
String s = 「ab,12,df」;
String s1[] = s.split(「,」);
該代碼的做用是以字符串」,」做爲間隔,拆分字符串s,從而獲得拆分之後的字符串數字s1,其內容爲:{「ab」,」12」,」df」}。
該方法是解析字符串的基礎方法。
若是字符串中在內部存在和間隔字符串相同的內容時將拆除空字符串,尾部的空字符串會被忽略掉。例如:
String s = 「abbcbtbb」;
String s1[] = s.split(「b」);
則拆分出的結果字符串數組s1的內容爲:{「a」,」」,」c」,」t」}。拆分出的中間的空字符串的數量等於中間間隔字符串的數量減一個。例如:
String s = 「abbbcbtbbb」;
String s1[] = s.split(「b」);
則拆分出的結果是:{「a」,」」,」」,」c」,」t」}。最後的空字符串不論有多少個,都會被忽略。
若是須要限定拆分之後的字符串數量,則可使用另一個split方法,例如:
String s = 「abcbtb1」;
String s1[] = s.split(「b」,2);
該代碼的做用是將字符串s最多拆分紅包含2個字符串數組。則結果爲:{「a」,」cbtb1」}。
若是第二個參數爲負數,則拆分出儘量多的字符串,包括尾部的空字符串也將被保留。
10、startsWith方法
該方法的做用和endsWith方法相似,只是該方法是判斷字符串是否以某個字符串做爲開始。例如:
String s = 「TestGame」;
boolean b = s.startsWith(「Test」);
則變量b的值是true。
11、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表明須要得到的子串的結束索引值,其變化的區間從起始索引值的後續一個到字符串長度。經過循環的嵌套,能夠遍歷字符串中的全部子串。
12、trim方法
該方法的做用是去掉字符串開始和結尾的全部空格,而後造成一個新的字符串。該方法不去掉字符串中間的空格。例如:
String s = 「 abc abc 123 「;
String s1 = s.trim();
則字符串s1的值爲:」 abc abc 123」。字符串s的值不變。
關於String類的使用就介紹這麼多,其它的方法以及這裏到的方法的詳細聲明能夠參看對應的API文檔。