Java:StringUtilsのsplit関数を使う際に気をつけること
この間コードを書いていたら発生した勘違いを忘れないうちにメモしておきます。
簡単にいえば、splitのseparatorは複数文字は対応していないという事です。
import org.apache.commons.lang.StringUtils; public class Split { public static void main(String[] args) { String tagert = "ABCDEFG.ABCDEFG"; String separator = "FG."; System.out.println(”split利用時”); String[] argFromSeparator = StringUtils.split(tagert, separator); for (int i = 0; i < argFromSeparator.length; i++) { System.out.println(argFromSeparator[i]); } System.out.println(”splitByWholeSeparator利用時”); String[] argFromWholeSeparator = StringUtils.splitByWholeSeparator(tagert,separator); for (int i = 0; i < argFromWholeSeparator.length; i++) { System.out.println(argFromWholeSeparator[i]); } } }
このコードの実行結果は以下のとおりです。
split利用時 ABCDE ABCDE splitByWholeSeparator利用時 ABCDE ABCDEFG
splitの方は判定をcharで行うので、2つ目のFGまで切断子として認識され消えます。
一方のsplitByWholeSeparatorの方は、2つ目のFGは切断子としては認識されないため残ります。
問題なのはsplitで渡せる引数がStringなので
複数文字列を渡してもコンパイルができちゃうことです。
僕はsplitByWholeSeparatorの存在を知らなかったので、
下手な勘違いをして問題解明に思った以上の時間を使ってしまいました。
結論としては
「Utilを使うなら中のコードまでしっかり追いましょう」
という当たり前の事でした。
勘違い怖い。