Chcę użyć string.startsWith()metody, ale ignorując przypadek.
Załóżmy, że mam String„Session” i używam startsWithna „sEsSi”, to powinno powrócić true.
Jak mogę to osiągnąć?
Chcę użyć string.startsWith()metody, ale ignorując przypadek.
Załóżmy, że mam String„Session” i używam startsWithna „sEsSi”, to powinno powrócić true.
Jak mogę to osiągnąć?
Odpowiedzi:
Użyj toUpperCase()lub, toLowerCase()aby ustandaryzować swój ciąg przed jego przetestowaniem.
String.equalsIgnoreCase(), odkryjesz, że musisz porównać wersje ciągów napisane zarówno małymi, jak i dużymi literami, zanim będziesz mógł ostatecznie wrócić false. Alternatywną odpowiedź można znaleźć na stackoverflow.com/a/38947571/14731 .
"İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())(w środowisku Locale.Turkish), da mi to fałsz.
Jedną z opcji jest przekonwertowanie obu na małe lub duże litery:
"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
To jest źle. Zobacz: https://stackoverflow.com/a/15518878/14731
Inną opcją jest użycie String#regionMatches()metody, która pobiera argument logiczny określający, czy dopasować z uwzględnieniem wielkości liter, czy nie. Możesz go używać w ten sposób:
String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5)); // true
Sprawdza, czy obszar needleod indeksu 0do długości 5jest obecny na haystackpoczątku od indeksu 0do długości, 5czy nie. Pierwszy argument to true, oznacza, że dopasuje bez rozróżniania wielkości liter.
A jeśli tylko jesteś wielkim fanem Regex , możesz zrobić coś takiego:
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
(?i) flaga osadzona służy do ignorowania dopasowania wielkości liter.
System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));nie jest odpowiednim rozwiązaniem. Możesz spróbować tego: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));z argumentami vm -Duser.country=TR -Duser.language=tr W tym przykładzie Ijest dużei
Spróbuj tego,
String session = "Session";
if(session.toLowerCase().startsWith("sEsSi".toLowerCase()))
Wiem, że się spóźniłem, ale co z użyciem StringUtils.startsWithIgnoreCase () z Apache Commons Lang 3?
Przykład:
StringUtils.startsWithIgnoreCase(string, "start");
Po prostu dodaj następującą zależność do pliku pom.xml (przyjmując hipotezę, że używasz Mavena):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
Możesz użyć someString.toUpperCase().startsWith(someOtherString.toUpperCase())
string.regionMatches(true, 0, prefix, 0, prefix.length());które nie wiąże się z kosztem „normalizacji” obu łańcuchów.