String類的判斷功能:
1 * boolean equals(Object obj):比較字符串的內容是否相同,區分大小寫 2 * boolean equalsIgnoreCase(String str):比較字符串的內容是否相同,忽略大小寫 3 * boolean contains(String str):判斷大字符串中是否包含小字符串 4 * boolean startsWith(String str):判斷字符串是否以某個指定的字符串開頭 5 * boolean endsWith(String str):判斷字符串是否以某個指定的字符串結尾 6 * boolean isEmpty():判斷字符串內容是否為空 ""
注意:
字符串內容為空和字符串對象為空。
String s = ""; 對象存在 內容為空
String s = null; 對象不存在 對象都不存在,所以不能調用方法,否則 空指針異常 NullPointerException
1 兩個字符串內容是否相同啊?
* boolean equals(Object obj); * boolean equalsIgnoreCase(string str);忽略大寫比較字符串內容。
該方法的作用是判斷兩個字符串對象的內容是否相同。如果相同則返回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。
2 字符串中是否包含指定字符串?
boolean contains(String str):判斷一個字符串中是否包含另一個字符串
1 String s = “student.doc”; 2 boolean b = s.contains(“doc”);// true 3 4 String s1 = "helloworld"; 5 System.out.println("contains:" + s1.contains("hello")); //true 6 System.out.println("contains:" + s1.contains("hw")); false
3 字符串是否以指定字符串開頭,是否以指定字符串結尾。
* boolean startsWith(string); * boolean endsWith(string);
endsWith方法的作用是判斷字符串是否以某個字符串結尾,如果以對應的字符串結尾,則返回true。
例如:
String s = “student.doc”;
boolean b = s.endsWith(“doc”);
則變量b的值是true。
startsWith方法該方法的作用和endsWith方法類似,只是該方法是判斷字符串是否以某個字符串作為開始。例如:
String s = “TestGame”;
boolean b = s.startsWith(“Test”);
則變量b的值是true。
4 boolean isEmpty():判斷字符串內容是否為空。
String s4 = "";
String s5 = null;
System.out.println("isEmpty:" + s4.isEmpty()); true
// NullPointerException
// s5對象都不存在,所以不能調用方法,空指針異常
System.out.println("isEmpty:" + s5.isEmpty());
String類的獲取功能
1 * int length():獲取字符串的長度。 2 * char charAt(int index):獲取指定索引位置的字符 3 * int indexOf(int ch):返回指定字符在此字符串中第一次出現處的索引。 4 為什么這里是int類型,而不是char類型? 5 原因是:'a'和97其實都可以代表'a' 6 7 * int indexOf(String str):返回指定字符串在此字符串中第一次出現處的索引。 8 * int indexOf(int ch,int fromIndex):返回指定字符在此字符串中從指定位置后第一次出現處的索引。 9 * int indexOf(String str,int fromIndex):返回指定字符串在此字符串中從指定位置后第一次出現處的索引。 10 11 12 * String substring(int start):從指定位置開始截取字符串,默認到末尾。 13 * String substring(int start,int end):從指定位置開始到指定位置結束截取字符串。
1 獲取字符串中字符的個數(長度). int length();
該方法的作用是返回字符串的長度,也就是返回字符串中字符的個數。
中文字符也是一個字符。例如:
1 String s = “abc”; 2 String s1 = “Java語言”; 3 int len = s.length(); 4 int len1 = s1.length();
則變量len的值是3,
變量len1的值是6。
2 根據位置獲取字符:char charAt(int index);按照索引返回字符
該方法的作用是按照索引值,獲得字符串中的指定字符。
(規定字符串中第一個字符的索引值是0,第二個字符的索引值是1,依次類推)
例如:
1 String s = “abc”; 2 char c = s.chatAt(1);
則變量c的值是’b’。
3 根據字符獲取在字符串中的第一次出現的位置.
1 * int indexOf(int ch) 2 * int indexOf(int ch,int fromIndex):從指定位置進行ch的查找第一次出現位置 3 * int indexOf(String str); 4 * int indexOf(String str,int fromIndex);
根據字符串獲取在字符串中的最后一次出現的位置.
1 * int lastIndexOf(int ch) 2 * int lastIndexOf(int ch,int fromIndex):從指定位置進行ch的查找第一次出現位置 3 * int lastIndexOf(String str); 4 * int lastIndexOf(String str,int fromIndex);
該方法的作用是查找特定字符或字符串在當前字符串中的起始位置,如果不存在則返回-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。
1.4 獲取字符串中一部分字符串。也叫子串.
* String substring(int beginIndex, int endIndex)//包含begin 不包含end 。 * String substring(int beginIndex); //截取begin到最后
該方法的作用是取字符串中的“子串”,所謂“子串”即字符串中的一部分。例如“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”。
下面是一個簡單的應用代碼,該代碼的作用是輸出任意一個字符串的所有子串。代碼如下:
1 String s = “子串示例”; 2 int len = s.length(); //獲得字符串長度 3 for(int begin = 0;begin < len – 1;begin++){ //起始索引值 4 for(int end = begin + 1;end <= len;end++){ //結束索引值 5 System.out.println(s.substring(begin,end)); 6 } 7 }
在該代碼中,循環變量begin代表需要獲得的子串的起始索引值,其變化的區間從第一個字符的索引值0到倒數第二個字符串的索引值len -2,
而end代表需要獲得的子串的結束索引值,其變化的區間從起始索引值的后續一個到字符串長度。通過循環的嵌套,可以遍歷字符串中的所有子串。
轉換功能
一 類型轉換 :
1 int i = 123 ; 2 String s = ""; 3 4 int --> string 5 6 s = i+""; 7 s = String.ValueOf(i);//推薦 8 s = Integer.toString(i); 9 10 string --> int 11 12 i = Integer.parseInt(s);//推薦
13 i = Integer.valueOf(i).intValue();
二 String的轉換功能
1 String[] split(String regex) 2 3 char[] toCharArray(); 4 byte[] getBytes(); 5 6 String toUpperCase():大寫 7 String toLowerCase():小寫 8 9 String replace(char oldch,char newch); 10 String replace(String s1,String s2); 11 12 String trim(); 13 String concat(string); 14 String valueOf(n)
注意:
+號在java中的3種作用:正號 加號 字符串連接
1 將字符串變成字符串數組(字符串的切割)
* String[] split(String regex):涉及到正則表達式.
該方法的作用是以特定的字符串作為間隔,拆分當前字符串的內容,一般拆分以后會獲得一個字符串數組。例如:
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”}。
如果第二個參數為負數,則拆分出盡可能多的字符串,包括尾部的空字符串也將被保留。
2 將字符串變成字符數組。
* char[] toCharArray();
該方法的作用和getBytes方法類似,即將字符串轉換為對應的char數組。例如:
String s = “abc”;
char[] c = s.toCharArray();
則字符數組c的值為:{‘a’,’b’,’c’}。
3 將字符串變成字節數組。
byte[] getBytes();
該方法的作用是將字符串轉換為對應的byte數組,從而便於數據的存儲和傳輸。例如:
String s = “計算機”;
byte[] b = s.getBytes(); //使用本機默認的字符串轉換為byte數組
byte[] b = s.getBytes(“gb2312”); //使用gb2312字符集轉換為byte數組
在實際轉換時,一定要注意字符集的問題,否則中文在轉換時將會出現問題。
4 將字符串中的字母轉成大小寫。
* String toUpperCase():大寫
* String toLowerCase():小寫
toLowerCase方法 該方法的作用是將字符串中所有大寫字符都轉換為小寫。例如:
String s = “AbC123”;
String s1 = s.toLowerCase();
則字符串s1的值是”abc123”,而字符串s的值不變。
類似的方法是toUpperCase,該方法的作用是將字符串中的小寫字符轉換為對應的大寫字符。例如:
String s = “AbC123”;
String s1 = s. toUpperCase ();
則字符串s1的值是”ABC123”,而字符串s的值也不變。
5 將字符串中的內容進行替換
* String replace(char oldch,char newch);
* String replace(String s1,String s2);
該方法的作用是替換字符串中所有指定的字符,然后生成一個新的字符串。經過該方法調用以后,原來的字符串不發生改變。例如:
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的內容也不發生改變
6 將字符串兩端的空格去除。
* String trim();
該方法的作用是去掉字符串開始和結尾的所有空格,然后形成一個新的字符串。該方法不去掉字符串中間的空格。例如:
String s = “ abc abc 123 “;
String s1 = s.trim();
則字符串s1的值為:”abc abc 123”。字符串s的值不變。
7 將字符串進行連接 。
* String concat(string);
該方法的作用是進行字符串的連接,將兩個字符串連接以后形成一個新的字符串。例如:
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。
8 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,就代表該自然數的位數。這種判斷比數學判斷方法在邏輯上要簡單一些。