StringUtils#splitメソッドの注意

org.apache.commons.lang3.StringUtilsクラスのsplitメソッドは、Stringクラスのsplitメソッドとは若干挙動が異なるため注意。

StringUtils#splitメソッドによって文字列を分割した場合、分割後のトークンが空文字となる場合は返却される配列に含まれない。

// 例
StringUtils.split("a.b.c", '.')   // = ["a", "b", "c"]
StringUtils.split("a..b.c", '.')  // = ["a", "b", "c"]
StringUtils.split("a:b:c", '.')   // = ["a:b:c"]
StringUtils.split("a b c", ' ')   // = ["a", "b", "c"]

分割後のトークンが空文字の場合でも返却される配列に含めるためには、StringUtils#splitPreserveAllTokensメソッドを使用すれば良い。

// 例
StringUtils.splitPreserveAllTokens("abc def", null)  // = ["abc", "def"]
StringUtils.splitPreserveAllTokens("abc def", " ")   // = ["abc", "def"]
StringUtils.splitPreserveAllTokens("abc  def", " ")  // = ["abc", "", def"]
StringUtils.splitPreserveAllTokens("ab:cd:ef", ":")  // = ["ab", "cd", "ef"]
StringUtils.splitPreserveAllTokens("ab:cd:ef:", ":") // = ["ab", "cd", "ef", ""]
StringUtils.splitPreserveAllTokens("ab:cd:ef::", ":")// = ["ab", "cd", "ef", "", ""]
StringUtils.splitPreserveAllTokens("ab::cd:ef", ":") // = ["ab", "", cd", "ef"]
StringUtils.splitPreserveAllTokens(":cd:ef", ":")    // = ["", cd", "ef"]
StringUtils.splitPreserveAllTokens("::cd:ef", ":")   // = ["", "", cd", "ef"]
StringUtils.splitPreserveAllTokens(":cd:ef:", ":")   // = ["", cd", "ef", ""]