Je veux utiliser la string.startsWith()
méthode mais en ignorant le cas.
Supposons que j'ai String
"Session" et que j'utilise startsWith
sur "sEsSi" alors il devrait revenir true
.
Comment puis-je atteindre cet objectif?
Je veux utiliser la string.startsWith()
méthode mais en ignorant le cas.
Supposons que j'ai String
"Session" et que j'utilise startsWith
sur "sEsSi" alors il devrait revenir true
.
Comment puis-je atteindre cet objectif?
Réponses:
Utilisez toUpperCase()
ou toLowerCase()
pour standardiser votre chaîne avant de la tester.
String.equalsIgnoreCase()
vous découvrirez que vous devez comparer les deux versions minuscules et majuscules des chaînes avant de pouvoir revenir de façon concluante false
. Voir stackoverflow.com/a/38947571/14731 pour une autre réponse.
"İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())
(dans un environnement Locale.Turkish), ça me donnera faux.
Une option consiste à les convertir tous les deux en minuscules ou en majuscules:
"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
C'est faux. Voir: https://stackoverflow.com/a/15518878/14731
Une autre option consiste à utiliser String#regionMatches()
method, qui prend un argument booléen indiquant s'il faut faire une correspondance sensible à la casse ou non. Vous pouvez l'utiliser comme ceci:
String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5)); // true
Il vérifie si la région de l' needle
index 0
à la longueur 5
est présente ou non à haystack
partir de l'index 0
jusqu'à la longueur 5
. Le premier argument est true
, signifie qu'il effectuera une correspondance insensible à la casse.
Et si seulement vous êtes un grand fan de Regex , vous pouvez faire quelque chose comme ceci:
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
(?i)
L'indicateur intégré sert à ignorer la correspondance de casse.
System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));
n'est pas une solution appropriée. Vous pouvez essayer ceci: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));
avec des arguments vm -Duser.country=TR -Duser.language=tr
Dans cet exemple, le I
est en majusculei
essaye ça,
String session = "Session";
if(session.toLowerCase().startsWith("sEsSi".toLowerCase()))
Je sais que je suis en retard, mais qu'en est-il de l'utilisation de StringUtils.startsWithIgnoreCase () d'Apache Commons Lang 3?
Exemple :
StringUtils.startsWithIgnoreCase(string, "start");
Ajoutez simplement la dépendance suivante à votre fichier pom.xml (en prenant l'hypothèse que vous utilisez Maven):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
Vous pouvez utiliser someString.toUpperCase().startsWith(someOtherString.toUpperCase())
string.regionMatches(true, 0, prefix, 0, prefix.length());
ce qui n'entraîne pas le coût de "normalisation" des deux chaînes.