String contains-ignoruj wielkość liter [duplikat]

To pytanie ma już odpowiedź tutaj:

Czy można określić, czy łańcuch str1="ABCDEFGHIJKLMNOP" zawiera wzór łańcucha strptrn="gHi"? Chciałem wiedzieć, czy to możliwe, gdy znaki są niewrażliwe na wielkość liter. Jeśli tak, to w jaki sposób?

Author: Tom, 2012-12-24

5 answers

Możesz użyć

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

Sprawdza, czy CharSequence zawiera znaki wyszukiwania niezależnie od sprawa, obsługa null. Niewrażliwość na przypadki definiowana jest przez Sznurek.equalsIgnoreCase (String).

Znak null zwróci false.

Ten będzie lepszy niż regex, ponieważ regex jest zawsze drogi pod względem wydajności.

Oficjalny dokument zawiera: StringUtils.containsIgnoreCase

Aktualizacja :

Jeśli jesteś wśród tych, którzy

  • nie chcę używać biblioteki Apache commons
  • nie chcesz iść z drogich regex/Pattern rozwiązań opartych,
  • nie chcesz tworzyć dodatkowego obiektu string za pomocą toLowerCase,

Możesz zaimplementować własne niestandardowe containsIgnoreCase używając java.lang.Sznurek.regionalmatches

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

ignoreCase : jeśli true, ignoruje wielkość liter podczas porównywania znaków.

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;
}
 206
Author: Rahul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-22 15:19:36

Jeśli nie chcesz używać regex:

"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())
 222
Author: PeterMmm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-24 07:36:42

Możesz używać Javy.util.regex.Wzór z flagą CASE_INSENSITIVE dla dopasowania niewrażliwego na wielkość liter:

Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find();
 22
Author: Muhammad Imran Tariq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-24 07:35:23

Spróbuj tego

public static void main(String[] args)
{

    String original = "ABCDEFGHIJKLMNOPQ";
    String tobeChecked = "GHi";

    System.out.println(containsString(original, tobeChecked, true));        
    System.out.println(containsString(original, tobeChecked, false));

}

public static boolean containsString(String original, String tobeChecked, boolean caseSensitive)
{
    if (caseSensitive)
    {
        return original.contains(tobeChecked);

    }
    else
    {
        return original.toLowerCase().contains(tobeChecked.toLowerCase());
    }

}
 7
Author: Rais Alam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-15 14:52:07

Zoptymalizowana wersja Imrana Tariqa

Pattern.compile(strptrn, Pattern.CASE_INSENSITIVE + Pattern.LITERAL).matcher(str1).find();

Wzór.quote (strptrn) zawsze zwraca "\ Q "+ s + "\ E " nawet jeśli nie ma nic do cytowania, konkatinacja psuje wydajność.

 1
Author: Evgeniy Dorofeev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-24 08:34:35