Voglio usare il string.startsWith()
metodo ma ignorando il caso.
Supponiamo che io abbia String
"Session" e lo uso startsWith
su "sEsSi", quindi dovrebbe tornare true
.
Come posso raggiungere questo obiettivo?
Voglio usare il string.startsWith()
metodo ma ignorando il caso.
Supponiamo che io abbia String
"Session" e lo uso startsWith
su "sEsSi", quindi dovrebbe tornare true
.
Come posso raggiungere questo obiettivo?
Risposte:
Usa toUpperCase()
o toLowerCase()
per standardizzare la tua stringa prima di testarla.
String.equalsIgnoreCase()
te, scoprirai che devi confrontare entrambe le versioni minuscole e maiuscole delle stringhe prima di poter tornare definitivamente false
. Vedi stackoverflow.com/a/38947571/14731 per una risposta alternativa.
"İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())
(in un ambiente Locale.Turkish), mi darà false.
Un'opzione è convertire entrambi in lettere minuscole o maiuscole:
"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
Questo è sbagliato. Vedi: https://stackoverflow.com/a/15518878/14731
Un'altra opzione è usare il String#regionMatches()
metodo, che accetta un argomento booleano che indica se eseguire o meno la corrispondenza con distinzione tra maiuscole e minuscole. Puoi usarlo in questo modo:
String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5)); // true
Controlla se la regione di needle
da indice 0
a lunghezza 5
è presente a haystack
partire da indice 0
fino a lunghezza 5
oppure no. Il primo argomento è true
, significa che eseguirà la corrispondenza senza distinzione tra maiuscole e minuscole.
E se solo sei un grande fan di Regex , puoi fare qualcosa del genere:
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
(?i)
il flag incorporato serve per ignorare la corrispondenza tra maiuscole e minuscole.
System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));
non è una soluzione valida. Puoi provare questo: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));
con gli argomenti vm -Duser.country=TR -Duser.language=tr
In questo esempio il I
è maiuscoloi
prova questo,
String session = "Session";
if(session.toLowerCase().startsWith("sEsSi".toLowerCase()))
So di essere in ritardo, ma per quanto riguarda l'utilizzo di StringUtils.startsWithIgnoreCase () da Apache Commons Lang 3?
Esempio :
StringUtils.startsWithIgnoreCase(string, "start");
Basta aggiungere la seguente dipendenza al tuo file pom.xml (ipotizzando che tu usi Maven):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
Puoi usare someString.toUpperCase().startsWith(someOtherString.toUpperCase())
string.regionMatches(true, 0, prefix, 0, prefix.length());
che non incorre nel costo di "normalizzare" entrambe le stringhe.