String 核心特性
- 不可變性:每次操作都會創建新對象,原對象不變
- 常量池:字面量自動入池,
new String() 在堆創建
- final 類:不可繼承,安全性高
常用方法分類速查
📏 長度與判空
| 方法 | 說明 | 示例 |
length() | 字符數(char 代碼單元) | "abc".length() == 3 |
isEmpty() | 長度為 0 | "".isEmpty() == true |
isBlank() | Java 11+,僅含空白字符 | " ".isBlank() == true |
🔍 查找與匹配
| 方法 | 說明 |
charAt(int index) | 指定索引字符 |
indexOf(String str) / lastIndexOf | 首次/最後一次出現索引,無則 -1 |
contains(CharSequence s) | 是否包含子串 |
startsWith/endsWith | 前綴/後綴匹配 |
matches(String regex) | 整串正則匹配 |
✂️ 截取與分割
| 方法 | 說明 |
substring(int begin) / (begin, end) | 截取子串 [begin, end) |
split(String regex) / (regex, limit) | 正則分割返回數組 |
subSequence(int start, int end) | 實現 CharSequence 接口 |
🔄 替換與大小寫
| 方法 | 說明 |
replace(CharSequence target, replacement) | 字面量替換(全量) |
replaceAll/replaceFirst(String regex, replacement) | 正則替換 |
toUpperCase() / toLowerCase() | 大小寫轉換(可指定 Locale) |
🧹 空白處理
| 方法 | 說明 |
trim() | 移除首尾空白(≤ U+0020) |
strip() / stripLeading() / stripTrailing() | Java 11+,Unicode 感知 |
🔗 拼接與轉換
| 方法 | 說明 |
concat(String str) | 拼接字符串 |
join(CharSequence delimiter, elements...) | Java 8+ 靜態方法拼接 |
valueOf(Object obj) | 任意類型轉字符串 |
toCharArray() | 轉 char 數組 |
getBytes(Charset charset) | 編碼為字節數組 |
📊 比較與格式化
| 方法 | 說明 |
equals(Object obj) / equalsIgnoreCase | 內容比較 |
compareTo(String another) | 字典序比較 |
format(String format, Object... args) | 靜態格式化 |
String.format(...) | 同上 |
效能最佳實踐
- 頻繁拼接用
StringBuilder(單線程)或 StringBuffer(多線程)
- 避免循環中
s += "x",會產生大量臨時對象
- 正則分割/替換預編譯
Pattern 復用
- 大文本處理考慮
CharSequence 避免複製
Java 版本新增亮點
- Java 8:
String.join、Chars.stream()
- Java 11:
isBlank、strip、repeat、lines()
- Java 12:
indent、transform
- Java 13:
Text Blocks(多行字符串 """...""")
熟練掌握 String API,配合版本新特性,能寫出更簡潔、高效、安全的字符串處理代碼。