Est-il possible de déterminer si une chaîne str1="ABCDEFGHIJKLMNOP"
contient un modèle de chaîne strptrn="gHi"
? Je voulais savoir si c'était possible lorsque les personnages étaient insensibles à la casse. Si c'est le cas, comment?
Vous pouvez utiliser
org.Apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
CharSequence searchStr);
Vérifie si CharSequence contient une recherche CharSequence indépendamment du cas, en traitant null. L'insensibilité à la casse est définie par String.equalsIgnoreCase (String).
Un CharSequence nul renverra false.
Celui-ci sera meilleur que regex car regex est toujours cher en termes de performances.
Pour la documentation officielle, voir: StringUtils.containsIgnoreCase
Mise à jour:
Si vous êtes parmi ceux qui
regex/Pattern
,toLowerCase
,vous pouvez implémenter votre propre containsIgnoreCase
personnalisée en utilisant Java.lang.String.regionMatches
public boolean regionMatches(boolean ignoreCase,
int toffset,
String other,
int ooffset,
int len)
ignoreCase
: si vrai, ignore la casse lors de la comparaison de 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 n'allez pas avec regex:
"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())
Vous pouvez utiliser Java.util.regex.Pattern avec l'indicateur CASE_INSENSITIVE pour la correspondance sans distinction de casse:
Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find();
Essaye ça
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();
Pattern.quote (strptrn) retourne toujours "\ Q" + s + "\ E" même s'il n'y a rien à citer, la concaturation nuit à la performance.