基於正則表達式,功能強大、靈活,推薦**首選**。
public String[] split(String regex, int limit) // 完整控制
public String[] split(String regex) // 等價 limit=0
| limit 值 | 行為 | 結果數組長度 | 尾部空串 |
|---|---|---|---|
| n > 0 | 模式最多應用 n-1 次 | ≤ n | 保留(最後一元素含剩餘內容) |
| n = 0 | 模式應用盡可能多次 | 任意 | **丟棄** |
| n < 0 | 模式應用盡可能多次 | 任意 | 保留 |
| regex | limit | 結果 |
|---|---|---|
| :` | 2 | {"boo", "and:foo"} |
| :` | 5 | {"boo", "and", "foo"} |
| :` | -2 | {"boo", "and", "foo"} |
| o | 5 | {"b", "", ":and:f", "", ""} |
| o | 0 | {"b", "", ":and:f"} |
等價關係:`str.split(regex, n)` ≡ `Pattern.compile(regex).split(str, n)`。
拋出 `PatternSyntaxException`(正則語法錯誤),建議編譯期預編譯 `Pattern` 復用,運行期捕獲異常。
**不推薦用於新代碼**,僅為兼容性保留。
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) System.out.println(st.nextToken());
// 輸出: this / is / a / test
| 維度 | String.split() | StringTokenizer |
|---|---|---|
| 功能強度 | 正則全功能 | 單字符分隔集 |
| 編碼複雜度 | 需掌握正則 | 極簡 |
| 對象創建 | 一次性返回數組 | 迭代器模式,逐個創建字符串 |
| 大字符串性能 | 較優 (內部優化) | 較差 |
| 內存峰值 | 較高 (持有全數組) | 較低 (流式) |
| 推薦場景 | **所有新代碼首選 split()**;極簡分隔、超大文本流式處理、舊系統維護可用 StringTokenizer | |
`String.split()` 是現代 Java 字符串分割的**標準答案**:正則表達力強、API 設計完善、性能經過 JVM 深度優化。`StringTokenizer` 退居歷史舞台,僅在極受限環境或維護舊代碼時登場。掌握 `limit` 語義、預編譯 `Pattern`、尾部空串保留三大技巧,即可應對 99% 分割場景。