String 類基礎特性
- 屬於
java.lang 套件,final 類別不可繼承
- 物件一旦建立內容不可變更(不可變物件)
- 雙引號字面值儲存於字串常量池,
new String() 建立於堆疊
建構子速查表
| 建構子 | 說明 | 範例 |
| String() | 空字串 | new String() |
| String(String) | 複製字串 | new String("abc") |
| String(char[]) | 字元陣列轉字串 | new String(new char[]{'a','b'}) |
| String(char[], offset, count) | 部分字元陣列 | new String(arr, 1, 2) |
| String(byte[]) | 位元組陣列解碼 | new String(new byte[]{65,66}) → "AB" |
| String(byte[], charset) | 指定編碼解碼 | new String(bytes, "UTF-8") |
核心方法分類速查
1. 長度與字元存取
int length() // 字串長度
char charAt(int index) // 指定索引字元
char[] toCharArray() // 轉字元陣列
byte[] getBytes(Charset charset) // 轉位元組陣列
2. 子字串擷取
String substring(int begin) // 從 begin 到結尾
String substring(int begin, int end) // [begin, end) 區間
3. 字串比較
| 方法 | 回傳值 | 特性 |
| equals(Object) | boolean | 內容比較,區分大小寫 |
| equalsIgnoreCase(String) | boolean | 忽略大小寫 |
| compareTo(String) | int | 字典序比較,回傳負/零/正 |
| compareToIgnoreCase(String) | int | 忽略大小寫字典序 |
| regionMatches(...) | boolean | 區域比較,可指定偏移長度 |
| startsWith/endsWith | boolean | 前綴/後綴比對 |
| contains(CharSequence) | boolean | 是否包含子序列 |
4. 字串連接與替換
String concat(String) // 連接,等同 +
String replace(char old, char new) // 字元替換
String replace(CharSequence, CharSequence) // 字面值替換
String replaceFirst(String regex, String) // 首個正則匹配替換
String replaceAll(String regex, String) // 所有正則匹配替換
5. 大小寫轉換與修剪
String toLowerCase() // 全小寫
String toUpperCase() // 全大寫
String trim() // 移除首尾空白
String strip() // Java 11+ 移除 Unicode 空白
6. 搜尋與分割
int indexOf(int ch / String) // 從前搜尋首次出現位置
int indexOf(int ch / String, int from) // 從指定位置搜尋
int lastIndexOf(int ch / String) // 從後搜尋
String[] split(String regex) // 正則分割
String[] split(String regex, int limit) // 限制分割數
7. 類型轉換:字串 ⇄ 基本型別
| 方向 | 方法 | 範例 |
| 字串 → int | Integer.parseInt(String) | Integer.parseInt("123") |
| 字串 → double | Double.parseDouble(String) | Double.parseDouble("3.14") |
| 字串 → boolean | Boolean.parseBoolean(String) | Boolean.parseBoolean("true") |
| 基本型別 → 字串 | String.valueOf(型別) | String.valueOf(123) |
| 數字 → 進制字串 | Integer.toBinary/Hex/OctalString(int) | Integer.toHexString(255) → "ff" |
效能最佳實踐
- 頻繁修改字串:使用
StringBuilder(單執行緒)或 StringBuffer(多執行緒)
- 字串比較:優先用
equals(),避免 == 比較參考
- 正則分割:重複使用時預編譯
Pattern
- 常量池複用:字面值自動駐留,
intern() 可手動駐留
Java 11+ 新增實用方法
boolean isBlank() // 全空白或空字串
String strip() // 移除首尾 Unicode 空白
String stripLeading() // 移除前導空白
String stripTrailing() // 移除尾隨空白
Stream lines() // 按行分割為 Stream
String repeat(int count) // 重複字串
// 範例:"=".repeat(30) → "=============================="