1. ホーム
  2. java

[解決済み] 文字列が含まれる - 大文字小文字を無視 [重複]

2022-04-20 23:54:45

質問

文字列が str1="ABCDEFGHIJKLMNOP" は、文字列パターン strptrn="gHi" ? 大文字・小文字を区別しない場合、それが可能かどうか知りたかったのです。もしそうなら、どのように?

どのように解決するのですか?

を使用することができます。

org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
                                     CharSequence searchStr);

CharSequenceが検索用CharSequenceを含むかどうかをチェックします。 の場合、NULLを扱う。大文字小文字を区別しないことは String.equalsIgnoreCase(String)。

nullのCharSequenceはfalseを返します。

として、正規表現よりもこちらの方が優れているでしょう。 Regexは常に高価である は、パフォーマンスの面で

公式のドキュメントについては、以下を参照してください。 StringUtils.containsIgnoreCase(大文字と小文字の区別なし

更新情報 :

という方は

  • Apache コモンズライブラリを使いたくない。
  • 高いのは嫌だ regex/Pattern をベースにしたソリューションです。
  • を使用して追加の文字列オブジェクトを作成する必要はありません。 toLowerCase ,

を実装することができます。 containsIgnoreCase を使って java.lang.String.regionMatches。

public boolean regionMatches(boolean ignoreCase,
                             int toffset,
                             String other,
                             int ooffset,
                             int len)

ignoreCase : true の場合、文字を比較する際に大文字と小文字を無視します。

public static boolean containsIgnoreCase(String str, String searchStr)     {
    if(str == null || searchStr == null) return false;

    final int length = searchStr.length();
    if (length == 0)
        return true;

    for (int i = str.length() - length; i >= 0; i--) {
        if (str.regionMatches(true, i, searchStr, 0, length))
            return true;
    }
    return false;
}