StringUtils#containsAnyメソッドの注意

org.apache.commons.lang3.StringUtilsクラスのcontainsAnyはオーバーロードされたいくつかのメソッドがあるが、ハマりやすい挙動があるため注意。

第2引数がCharSequence

public static boolean containsAny(final CharSequence cs, final CharSequence searchChars) 

の方のメソッドは、第2引数の文字列に含まれるいずれかの文字が含まれていた場合にtrueとなってしまう。

// 例
StringUtils.containsAny("abcde", "aaa"); // true

StringUtils.containsAny("abcde", "efghi"); // true

第2引数がCharSequence...

public static boolean containsAny(final CharSequence cs, final CharSequence... searchCharSequences)

の方は可変引数を使って以下のような挙動となる。

// 例
StringUtils.containsAny("abcde", "aaa", "bbb", "ccc"); // false

StringUtils.containsAny("abcde", "cde", "def", "efg"); // true

可変引数のメソッドなのに、引数の数が1のときだけ挙動が変わるメソッドのため、これからバリエーション増えそうだからStringUtils.contains()じゃなくてStringUtils.containsAny()にしとこうという安易な考えでハマらないように注意。