`String.split(String regex)` 行為在邊界情況下常違反直覺:
// 測試代碼
"".split(",") // [1] length=1, 內容 [""]
"c".split(",") // [1] length=1, 內容 ["c"]
"c,,,".split(",") // [1] length=1, 內容 ["c"] ← 關鍵!
"c,,c".split(",") // [3] length=3, 內容 ["c", "", "c"]
",".split(",") // [0] length=0, 內容 []
limit=0 表示「不限制分割次數,但**丟棄尾部空串**」。| limit 值 | 行為 | 適用場景 |
|---|---|---|
limit > 0 | 最多分割 limit-1 次,最後一段包含剩餘內容,**保留尾部空串** | 解析固定欄位 CSV、保留空值 |
limit = 0 | 無限制分割,**丟棄尾部空串** (預設) | 一般用途,不關心尾部空值 |
limit < 0 | 無限制分割,**保留尾部空串** | **最推薦**:完整保留所有欄位 |
"c,,,".split(",", -1) // ["c", "", "", ""] length=4 ✅
",".split(",", -1) // ["", ""] length=2 ✅
"a,b,c".split(",", -1) // ["a", "b", "c"] length=3
"a,b,c".split(",", 2) // ["a", "b,c"] length=2
// 錯誤:. | * ? + { } [ ] ( ) ^ $ 等為正則元字符
"1.2.3".split(".") // [] 空陣列!. 匹配任意字符
// 正確:雙反斜杠轉義 或 Pattern.quote()
"1.2.3".split("\\.") // ["1", "2", "3"]
"1.2.3".split(Pattern.quote(".")) // 更安全