String 為 final 類,底層 char[] value(JDK 9+ 為 byte[] + coder),任何修改操作都會返回新對象,原對象不變。
| 類別 | 代表方法 | 說明 |
|---|---|---|
| 獲取 | length() | 字符數(非字節數) |
charAt(int index) | 指定位置字符,越界拋 StringIndexOutOfBoundsException | |
indexOf(int ch/Str, fromIndex) | 正向查找首次出現位置,無則 -1 | |
lastIndexOf(...) | 反向查找最後一次位置 | |
substring(begin, end) | 左閉右開 [begin, end),end 可省略至末尾 | |
| 判斷 | contains(CharSequence) | 是否包含子串 |
isEmpty() | length()==0(JDK 6+) | |
startsWith/endsWith | 前綴/後綴匹配 | |
equals/equalsIgnoreCase | 內容比較,切勿用 == | |
| 轉換 | toCharArray() | 字符數組副本 |
getBytes(charset) | 編碼為字節數組,指定字符集避免亂碼 | |
valueOf(type) | 靜態工廠,基本類型/物件 → String,null 安全 | |
new String(byte[], charset) | 解碼構造器 | |
| 替換 | replace(old, new) | 字符/字符串替換,全部替換,支持正則用 replaceAll |
| 分割 | split(regex, limit) | 正則分割,limit>0 限制結果長度,limit<0 保留尾部空串 |
| 大小寫/去空白/比較 | toUpperCase()/toLowerCase() | 區域相關,可傳 Locale |
trim() | 去除首尾空白字符(≤U+0020),JDK 11+ 有 strip() 支援 Unicode 空白 | |
compareTo(another) | 字典序比較,返回首個不同字符的碼位差值 |
StringBuilder,避免產生大量中間對象。== 比較引用,equals 比較內容。常量池機制導致 "a" == "a" 為 true,但 new String("a") == "a" 為 false。"a|b".split("|") → 全切開,需 split("\\|")。String.format("%,.2f", 1234.567) → "1,234.57"。String s = "abcdefakbf";
s.length(); // 10
s.charAt(4); // 'e'
s.indexOf('a'); // 0
s.indexOf('a', 3); // 5
s.lastIndexOf("a"); // 7
s.substring(2); // "cdefakbf"
s.substring(2, 5); // "cde"
s.contains("def"); // true
s.replace('a', 'X'); // "XbcdefXkbf"
s.split("f"); // ["abcde", "akb", ""]
s.toUpperCase(); // "ABCDEFAKBF"
" hi ".trim(); // "hi"
"abc".compareTo("abd"); // -1 ('c' - 'd')
掌握 String 高頻 API,關鍵在於理解不可變性、編碼/解碼、正則分割與比較語義。實戰中善用 StringBuilder、StringJoiner(JDK 8+)提升效能,警惕 substring 與常量池陷阱。