一、字符串定義與創建
字符串是Java中最重要的類之一,簡單來說就是一組字符的序列。字符串的定義可以使用char數組和String類型兩種方式,而String類型又可以使用直接量或構造函數。
1. char數組方式
char[] charArray = {'J', 'a', 'v', 'a'}; String str1 = new String(charArray); // 定義字符串
一般來說,使用char數組方式定義字符串較少使用。
2. 直接量方式
String str2 = "Java"; // 直接定義
使用直接量方式可以方便快捷地定義字符串,它是使用雙引號包含一個或多個字符常量,引號中的字符就是字符串的值。
3. 構造函數方式
String str3 = new String("Java"); // 通過構造函數定義
使用構造函數方式定義字符串可以靈活地操作字符串對象。構造函數分為以下兩類:
- public String():默認構造函數,創建一個空字符串對象。
- public String(String original):使用原字符串創建一個新的字符串對象。
二、字符串常見方法
1. 字符串比較
在Java中,字符串比較是很常見的操作。一般來說,比較字符串可以使用「==」或equals()方法,但是兩者有所不同。
1) 字符串比較==
String str1 = "Java"; String str2 = "Java"; System.out.println(str1 == str2); // 輸出true
字符串比較時,如果使用「==」操作符,比較的是兩個字符串的引用是否相同。
2) 字符串比較equals()
String str1 = "Java"; String str2 = "Java"; System.out.println(str1.equals(str2)); // 輸出true
字符串比較時,使用equals()方法比較的是兩個字符串的內容是否相同。
2. 字符串查找
在字符串中查找某個字符或字符串,可以使用indexOf()、lastIndexOf()、startsWith()、endsWith()等方法。
1) indexOf()和lastIndexOf()
String str = "Java test case"; int index1 = str.indexOf("t"); // 查找字符串中第一個出現「t」的位置 int index2 = str.lastIndexOf("t"); // 查找字符串中最後一個出現「t」的位置
這兩種方法可以查找指定字符或字符串在字符串中第一次或最後一次出現的位置,如果沒找到則返回-1。
2) startsWith()和endsWith()
String str = "Java test case"; boolean startsWith = str.startsWith("Java"); // 是否以「Java」開頭 boolean endsWith = str.endsWith("case"); // 是否以「case」結尾
這兩種方法可以判斷字符串是否以指定的前綴或後綴開頭或結束。
3. 字符串分割
字符串分割是常見的字符串操作之一,可以使用split()方法進行分割。
String str = "Java is a programming language."; String[] arr = str.split(" "); // 以空格為分隔符進行分割 for(String s : arr) { System.out.println(s); }
上面的代碼將字符串按照空格進行分割,得到一個字符串數組。可以通過循環輸出數組中的每一項。
4. 字符串替換
字符串替換是常見的字符串操作之一,可以使用replace()方法進行替換。
String str = "Java is a programming language."; String newStr = str.replace("Java", "Python"); // 將「Java」替換為「Python」 System.out.println(newStr);
上面的代碼將字符串中的「Java」替換為「Python」,輸出結果為「Python is a programming language.」。
三、字符串常量池
在Java中,字符串常量池是一塊特殊的內存區域,用於存儲字符串對象。字符串常量池有以下特點:
- 同一個字符串常量池中不會有兩個相同的字符串對象。
- 使用直接量進行字符串賦值時,虛擬機會先在字符串常量池中查找是否已存在該字符串對象,如果不存在則在字符串常量池中新增一個字符串對象。
- 使用new關鍵字進行字符串賦值時,虛擬機會先在字符串常量池中查找是否已存在該字符串對象,如果不存在則在堆內存中創建一個新的字符串對象。
四、字符串性能
由於字符串常用於連接、查找、分割、替換等操作,因此字符串的性能往往是我們需要關注的重點。Java提供了StringBuilder和StringBuffer兩種類來優化字符串的性能問題。
1. StringBuilder
StringBuilder用於字符串拼接操作。在進行字符串拼接操作時,建議使用StringBuilder而不是使用「+」或StringBuffer。StringBuilder是非線程安全的,因此適用於單線程的情況。
StringBuilder sb = new StringBuilder(); for(int i = 0; i < 100; i++) { sb.append(i); } String str = sb.toString();
上面的代碼使用StringBuilder拼接了一個長度為100的數字字符串,並將StringBuilder轉化為String。
2. StringBuffer
StringBuffer也是用於字符串拼接操作的類。StringBuffer是線程安全的,因此適用於多線程的情況,但是由於線程同步的緣故,其性能稍差於StringBuilder。
StringBuffer sb = new StringBuffer(); for(int i = 0; i < 100; i++) { sb.append(i); } String str = sb.toString();
上面的代碼使用StringBuffer拼接了一個長度為100的數字字符串,並將StringBuffer轉化為String。
總結
本文對Java字符串的定義與創建、字符串常見方法、字符串常量池、字符串性能等方面進行了介紹,對於初學者來說,掌握好這些內容能夠幫助使用Java中字符串的編程更加得心應手。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/247109.html