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