Java String 類常用方法詳解
在 Java 編程里,字符串操作十分常見,而 String
類作為 Java 標準庫的核心類,用于表示不可變的字符序列。任何對字符串的修改操作都會返回一個新的字符串對象,不會改變原始字符串。本文將詳細介紹 String
類的常用方法,并結合示例代碼幫助理解。
一、String 對象的創建
String
對象的創建主要有以下兩種方式:
1. 直接賦值
這是最常見的創建字符串的方式,使用雙引號將一系列字符括起來即可:
String str1 = "Hello, ";
2. 使用 new
關鍵字
通過對象實例化的方式,將需要創建的字符串作為構造參數傳入:
String str2 = new String("Hello, Java");
若調用 String
類的無參構造方法,則會創建一個空字符串,不過這種方式很少使用:
String str3 = new String();
二、獲取字符串長度
可以使用 length()
方法來獲取字符串的長度,示例代碼如下:
public class StringMethod1 {public static void main(String[] args) {String str = "hello world!";int length = str.length();System.out.println("str的長度為:" + length);}
}
運行結果:
str的長度為:12
需要注意的是,字符串中的空格也算一個字符。
三、字符串查找
1. 獲取指定位置字符
使用 char charAt(int index)
方法可以獲取字符串指定位置的字符,索引下標從 0 開始。示例如下:
public class StringMethod2 {public static void main(String[] args) {String str = "I love Java";char c = str.charAt(7);System.out.println("索引位置為7的字符為:" + c);}
}
運行結果:
索引位置為7的字符為:J
2. 查找字符串位置
indexOf()
:獲取字符或子串在字符串中第一次出現的位置。lastIndexOf()
:獲取字符或子串在字符串中最后一次出現的位置。
示例代碼如下:
public class StringMethod2 {public static void main(String[] args) {String str = "I love Java, I love imooc!";// 獲取字符在字符串中第一次出現的位置int i1 = str.indexOf('a');System.out.println("字符a在字符串str第一次出現的位置為:" + i1);// 獲取子串在字符串中第一次出現的位置int i2 = str.indexOf("love");System.out.println("子串love在字符串str第一次出現的位置為:" + i2);// 獲取字符在字符串中最后一次出現的位置int i3 = str.lastIndexOf('e');System.out.println("字符e在字符串str最后一次出現的位置為:" + i3);// 獲取子串在字符串中最后一次出現的位置int i4 = str.lastIndexOf("I love");System.out.println("子串I love在字符串str最后一次出現的位置為:" + i4);// 查找不存在的字符int i5 = str.indexOf('E');System.out.println("查找不存在的字符E的結果為:" + i5);}
}
運行結果:
字符a在字符串str第一次出現的位置為:8
子串love在字符串str第一次出現的位置為:2
字符e在字符串str最后一次出現的位置為:18
子串I love在字符串str最后一次出現的位置為:13
查找不存在的字符E的結果為:-1
需要注意的是,以上方法的參數都是區分大小寫的,如果沒有找到指定的字符或子串,會返回 -1。
四、字符串截取
可以使用 substring()
方法來獲取子串,String
類中有兩個重載的實例方法:
String substring(int beginIndex)
:獲取從beginIndex
位置開始到結束的子串。String substring(int beginIndex, int endIndex)
:獲取從beginIndex
位置開始到endIndex
位置的子串(不包含endIndex
位置字符)。
示例代碼如下:
public class StringMethod3 {public static void main(String[] args) {String str = "I love Java";String substring1 = str.substring(2);String substring2 = str.substring(2, 6);System.out.println("從索引位置2到結束的子串為:" + substring1);System.out.println("從索引位置2到索引位置6的子串為:" + substring2);}
}
運行結果:
從索引位置2到結束的子串為:love Java
從索引位置2到索引位置6的子串為:love
五、字符串切割
1. 切割為子串數組
使用 String[] split(String regex)
方法可將字符串切割為子串,其參數 regex
是一個正則表達式分隔符,返回字符串數組。示例如下:
public class StringMethod4 {public static void main(String[] args) {String str1 = "I love Java";String[] strArr = str1.split(" ");for (String str : strArr) {System.out.print(str + "\t");}}
}
運行結果:
I love Java
對于一些特殊的分隔符,如 *
、^
、:
、|
、.
等,需要使用轉義字符轉義。例如:
// 以 * 切割
String str2 = "I*love*Java";
String[] strArr2 = str2.split("\\*");// 以 \ 切割
String str3 = "I\\love\\Java";
String[] strArr3 = str3.split("\\\\");// 以 | 切割
String str4 = "I|love|Java";
String[] strArr4 = str4.split("\\|");
另外,還有一個重載方法 String[] split(String regex, int limit)
,其第二個參數 limit
用以控制正則匹配被應用的次數,會影響結果的長度。
2. 切割為 byte
數組
在實際工作中,網絡上的數據傳輸通常使用二進制字節數據,因此字符串和字節數組之間的相互轉換很常用。可以使用 getBytes()
方法將字符串轉換為 byte
數組,示例如下:
public class StringMethod4 {public static void main(String[] args) {String str2 = "我喜歡Java";System.out.println("將字符串轉換為byte數組:");byte[] ascii = str2.getBytes();for (byte aByte : ascii) {System.out.print(aByte + "\t");}// 將字節數組轉換為字符串String s = new String(ascii);System.out.println("\n將字節數組轉換為字符串:" + s);}
}
六、字符串大小寫轉換
字符串的大小寫轉換有兩個方法:
toLowerCase()
:將字符串轉換為小寫。toUpperCase()
:將字符串轉換為大寫。
示例代碼如下:
public class StringMethod5 {public static void main(String[] args) {String str = "HELLO world";String s1 = str.toLowerCase();System.out.println("字符串str轉換為小寫后為:" + s1);String s2 = s1.toUpperCase();System.out.println("字符串s1轉換為大寫后為:" + s2);// 實現大小寫互換String[] strArr = str.split(" ");String result = strArr[0].toLowerCase() + " " + strArr[1].toUpperCase();System.out.println("字符串str的大小寫互換后為:" + result);}
}
運行結果:
字符串str轉換為小寫后為:hello world
字符串s1轉換為大寫后為:HELLO WORLD
字符串str的大小寫互換后為:hello WORLD
七、字符串比較
String
類提供了 boolean equals(Object object)
方法來比較字符串內容是否相同,返回一個布爾類型的結果。需要特別注意的是,在比較字符串內容是否相同時,必須使用 equals()
方法而不能使用 ==
運算符。示例代碼如下:
public class StringMethod6 {public static void main(String[] args) {String str1 = "hello";String str2 = "hello";String str3 = new String("hello");System.out.println("使用equals()方法比較str1和str2的結果為:" + str1.equals(str2));System.out.println("使用==運算符比較str1和str2的結果為:" + (str1 == str2));System.out.println("使用equals()方法比較str1和str3的結果為:" + str1.equals(str3));System.out.println("使用==運算符比較str1和str3的結果為:" + (str1 == str3));}
}
運行結果:
使用equals()方法比較str1和str2的結果為:true
使用==運算符比較str1和str2的結果為:true
使用equals()方法比較str1和str3的結果為:true
使用==運算符比較str1和str3的結果為:false
==
運算符比較的是兩個變量的地址而不是內容。當使用直接賦值的方式創建字符串時,相同內容的字符串會指向常量池中的同一個對象;而使用 new
關鍵字創建字符串對象時,會在堆空間實例化一個新的對象。
八、小結
本文介紹了 Java String
類的常用方法:
- 使用
length()
方法可以獲取字符串長度。 - 使用
charAt()
、indexOf()
以及lastIndexOf()
方法可以對字符串進行查找。 substring()
方法可以對字符串進行截取,split()
、getBytes()
方法可以將字符串切割為數組。toLowerCase()
和toUpperCase()
方法分別用于大小寫轉換,使用equals()
方法對字符串進行比較,要注意對字符串內容進行比較時,不要使用==
運算符。
這些方法大多有重載方法,實際工作中,要根據合適的場景選用對應的重載方法。此外,String
類還有很多未介紹到的方法,使用時可以翻閱官網文檔進行學習。