Ich möchte die string.startsWith()
Methode verwenden, aber den Fall ignorieren.
Angenommen, ich habe String
"Session" und verwende startsWith
"sEsSi", dann sollte es zurückkehren true
.
Wie kann ich das erreichen?
Ich möchte die string.startsWith()
Methode verwenden, aber den Fall ignorieren.
Angenommen, ich habe String
"Session" und verwende startsWith
"sEsSi", dann sollte es zurückkehren true
.
Wie kann ich das erreichen?
Antworten:
Verwenden Sie toUpperCase()
oder toLowerCase()
, um Ihre Zeichenfolge zu standardisieren, bevor Sie sie testen.
String.equalsIgnoreCase()
Sie feststellen, dass Sie sowohl Klein- als auch Großbuchstaben der Strings vergleichen müssen, bevor Sie endgültig zurückkehren können false
. Eine alternative Antwort finden Sie unter stackoverflow.com/a/38947571/14731 .
"İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())
(in einer Locale.Turkish-Umgebung), werde ich falsch sein.
Eine Möglichkeit besteht darin, beide in Klein- oder Großbuchstaben umzuwandeln:
"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
Das ist falsch. Siehe: https://stackoverflow.com/a/15518878/14731
Eine andere Option ist die Verwendung einer String#regionMatches()
Methode, die ein boolesches Argument verwendet, das angibt, ob zwischen Groß- und Kleinschreibung unterschieden werden soll oder nicht. Sie können es so verwenden:
String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5)); // true
Sie prüft , ob die Region needle
von Index 0
bis Länge 5
in vorhanden ist , haystack
aus dem Index beginnend 0
bis Länge 5
oder nicht. Das erste Argument true
bedeutet, dass die Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung erfolgt.
Und wenn Sie nur ein großer Fan von Regex sind , können Sie so etwas tun:
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
(?i)
Das eingebettete Flag dient zum Ignorieren der Fallübereinstimmung.
System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));
ist keine richtige Lösung. Sie können dies versuchen: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));
mit VM-Argumenten -Duser.country=TR -Duser.language=tr
In diesem Beispiel I
ist das Großbuchstabeni
Versuche dies,
String session = "Session";
if(session.toLowerCase().startsWith("sEsSi".toLowerCase()))
Sie können verwenden someString.toUpperCase().startsWith(someOtherString.toUpperCase())
Ich weiß, dass ich zu spät bin, aber was ist mit StringUtils.startsWithIgnoreCase () von Apache Commons Lang 3?
Beispiel:
StringUtils.startsWithIgnoreCase(string, "start");
Fügen Sie Ihrer pom.xml-Datei einfach die folgende Abhängigkeit hinzu (unter der Annahme, dass Sie Maven verwenden):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
string.regionMatches(true, 0, prefix, 0, prefix.length());
der die Kosten für die "Normalisierung" beider Zeichenfolgen nicht anfallen.