Java split empty strings

Sample Code

String str = "a,b,c,,";
String[] ary = str.split(",");

// result 3
System.out.println(ary.length);

在 code review 的時候發現一個有趣的狀況,
split(",") 處理完, 預期結果應該是 5, 然而實際上卻是 3,
查了一下 API 發現 public String[] split(String regex) 要求的參數其實是 regrex express,
這有可能導致 IndexOutOfBoundException, 建議改為

public String[] split(String regex, int limit)

limit 用來限制 array 的長度,
如果 limit > 0, 最終處理的 array 長度不會大於 limit, regex express 匹配的次數最多為 n - 1 次,
如果 limit < 0, regex express 會盡可能的處理匹配, 包含對 空字串 匹配的問題,
如果 limit = 0, regex express 會儘可能地處理匹配, 但會放棄處理 空字串 匹配的問題。

參考:API Doc

Sample Code

String str = "a,b,c,,";
String[] ary = str.split(",", -1);

// result 5
System.out.println(ary.length);

沒有留言:

張貼留言