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)
の方のメソッドは、第2引数の文字列配列に含まれるいずれかの文字列が含まれていた場合にtrueとなる。(今回は、こちらが想定していた挙動)
// 例
StringUtils.containsAny("abcde", "aaa", "bbb", "ccc"); // false
StringUtils.containsAny("abcde", "cde", "def", "efg"); // true
可変引数のメソッドなのに、引数の数が1のときだけ挙動が変わるメソッド(のように見える)のため、これからバリエーション増えそうだからStringUtils.contains()じゃなくてStringUtils.containsAny()にしとこうという安易な考えでハマらないように注意。
以下のように無理やりキャストすることで、可変引数のメソッドの方を呼び出すようにできる。
StringUtils.containsAny("abcde", new String[]{"aaa"}); // false
StringUtils.containsAny("abcde", new String[]{"efghi"}); // false
