String contains-ignoruj wielkość liter [duplikat]
To pytanie ma już odpowiedź tutaj:
- Jak sprawdzić, czy łańcuch znaków zawiera inny łańcuch w sposób niewrażliwy na wielkość liter w Javie? 17 odpowiedzi
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?
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;
}
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())
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();
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());
}
}
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ść.
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