Il n'y avait aucune raison de clore cette question. Quoi qu'il en soit, la meilleure solution est d'utiliser string.regionMatches(true, 0, prefix, 0, prefix.length());ce qui n'entraîne pas le coût de "normalisation" des deux chaînes.
isapir
@AlexanderAbakumov Très bien pour moi. La bonne réponse est publiée dans mon commentaire ci-dessus. C'est beaucoup plus efficace que de changer la casse des chaînes. Ce serait bien de le mettre à niveau vers une réponse plutôt qu'un commentaire.
isapir
Réponses:
98
Utilisez toUpperCase()ou toLowerCase()pour standardiser votre chaîne avant de la tester.
Le gros problème ici est la performance. Pour les petites chaînes, pas de problème, mais si vous en avez une grande ... je veux dire ... Ferez-vous vraiment un toUpperCase dans une chaîne de 1 Mo juste pour comparer 4 à 10 caractères officiels?
Dyorgio
4
Hum même si je ne vois pas pourquoi je voudrais comparer la partie de départ d'une chaîne de 1 Mo, alors si seulement 4 à 10 caractères initiaux m'intéressent, j'utilise une sous-chaîne, puis je normalise et fait ...
Nemesis
3
Cette réponse (et toutes les autres réponses trouvées ici) sont fausses. Si vous regardez la mise en œuvre de 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.
Gili
10
Cette réponse n'est pas vraie car toLowerCase () utilise Locale.getDefault () en interne pour modifier les caractères et cela peut conduire à de faux négatifs. Disons que vous voulez comparer "İstanbul" avec "istanbul". En turc, l'équivalent minuscule de «İ» est «ı». Donc, quand j'essaye de faire ça "İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())(dans un environnement Locale.Turkish), ça me donnera faux.
Mustafa Berkay Mutlu
1
@Nemesis, Cette réponse est fausse, l'avoir comme réponse acceptée pourrait être trompeuse pour beaucoup de gens. Pourriez-vous s'il vous plaît modifier votre réponse et créer un lien vers la réponse de Rohit Jain.
Moha le chameau tout-puissant
88
Une option consiste à les convertir tous les deux en minuscules ou en majuscules:
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:
Il vérifie si la région de l' needleindex 0à la longueur 5est présente ou non à haystackpartir de l'index 0jusqu'à 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:
En fait, supposons qu'il y ait une table qui contient plus de 1 entrées lakh, et j'utilise une boucle for sur une colonne particulière pour analyser toutes ces entrées et en cela, j'essaie d'utiliser cette option en minuscules ci-dessus pour rechercher une entrée commençant par un modèle particulier . Donc, cela pose un problème de performances. S'il n'y a aucune correspondance trouvée, alors en interne, il analysera toutes les entrées, ce qui prendra beaucoup de temps, car simultanément il sera également converti en minuscules. Alors, existe-t-il une autre option pour résoudre les problèmes de performances?
Sheetal Bhatewara
@Rohit Jain, en fait ceci: 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 Iest en majusculei
string.regionMatches(true, 0, prefix, 0, prefix.length());
ce qui n'entraîne pas le coût de "normalisation" des deux chaînes.Réponses:
Utilisez
toUpperCase()
outoLowerCase()
pour standardiser votre chaîne avant de la tester.la source
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 concluantefalse
. 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:C'est faux. Voir: https://stackoverflow.com/a/15518878/14731Une 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:Il vérifie si la région de l'
needle
index0
à la longueur5
est présente ou non àhaystack
partir de l'index0
jusqu'à la longueur5
. Le premier argument esttrue
, 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:
(?i)
L'indicateur intégré sert à ignorer la correspondance de casse.la source
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, leI
est en majusculei
la source
essaye ça,
la source
Je sais que je suis en retard, mais qu'en est-il de l'utilisation de StringUtils.startsWithIgnoreCase () d'Apache Commons Lang 3?
Exemple :
Ajoutez simplement la dépendance suivante à votre fichier pom.xml (en prenant l'hypothèse que vous utilisez Maven):
la source
Vous pouvez utiliser
someString.toUpperCase().startsWith(someOtherString.toUpperCase())
la source
Tu peux toujours faire
la source
l'utilisation commence par et toLowerCase ensemble
comme ça
la source