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/Pattern
solutions - 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.