Chaîne contient - ignorer la casse [dupliquer]
cette question a déjà une réponse ici:
- Comment vérifier si une chaîne de caractères contient une autre chaîne de caractères d'une manière non sensible à la casse en Java? 17 réponses
est-il possible de déterminer si une chaîne de caractères str1="ABCDEFGHIJKLMNOP" contient une chaîne de caractères strptrn="gHi" ? Je voulais savoir si c'est possible lorsque les caractères sont insensibles à la casse. Si oui, comment?
5 réponses
vous pouvez utiliser
org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
CharSequence searchStr);
vérifie si CharSequence contient une CharSequence de recherche indépendamment de cas, traitement null. L'insensibilité à la casse est défini que par Chaîne.equalsIgnoreCase(Chaîne de caractères).
null CharSequence retournera false.
celui-ci sera meilleur que regex car regex est toujours cher en termes de performance.
Pour officiel doc, reportez-vous à : StringUtils.containsIgnoreCase
mise à jour:
Si vous êtes parmi ceux qui
- ne veulent pas l'utilisation d'Apache commons library
- ne veulent pas aller avec le cher
regex/Patternsolutions - Je ne veux pas créer d'objet chaîne supplémentaire en utilisant
toLowerCase,
vous pouvez mettre en œuvre votre propre coutume containsIgnoreCase en utilisant java.lang.Chaîne.regionMatches
public boolean regionMatches(boolean ignoreCase,
int toffset,
String other,
int ooffset,
int len)
ignoreCase : si elle est vraie, ne tient pas compte du cas lors de la comparaison des caractères.
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;
}
Si vous ne voulez pas aller avec les regex:
"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())
vous pouvez utiliser java.util.regex.Modèle avec les CASE_INSENSITIVE drapeau de correspondance insensible à la casse:
Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find();
Essayez cette
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());
}
}
une version optimisée D'Imran Tariq
Pattern.compile(strptrn, Pattern.CASE_INSENSITIVE + Pattern.LITERAL).matcher(str1).find();
motif.citation (strptrn) retourne toujours "\Q" + s + "\E" même s'il n'y a rien à citer, la concatination gâte la performance.