読者です 読者をやめる 読者になる 読者になる

文字の洪水に溺れながら

人生初心者、でも人生のハードモードぐらいを生き抜きたい人間。

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を使うなら中のコードまでしっかり追いましょう」
という当たり前の事でした。

勘違い怖い。