Я хочу використовувати string.startsWith()метод, але ігноруючи випадок.
Припустимо, у мене є String"Сесія", і я використовую startsWith"sEsSi", тоді він повинен повернутися true.
Як я можу цього досягти?
Я хочу використовувати string.startsWith()метод, але ігноруючи випадок.
Припустимо, у мене є String"Сесія", і я використовую startsWith"sEsSi", тоді він повинен повернутися true.
Як я можу цього досягти?
Відповіді:
Використовуйте toUpperCase()або toLowerCase()стандартизуйте рядок перед її тестуванням.
String.equalsIgnoreCase() ви побачите, що вам потрібно порівняти як малі, так і великі версії рядків, перш ніж ви зможете безумовно повернутися false. Дивіться stackoverflow.com/a/38947571/14731 для альтернативної відповіді.
"İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())(у середовищі Locale.Turkish), це призведе до помилки.
Один із варіантів - перетворити обидва в малі або великі регістри:
"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
Це неправильно. Дивіться: https://stackoverflow.com/a/15518878/14731
Іншим варіантом є використання String#regionMatches()методу, який приймає логічний аргумент, вказуючи, чи слід робити відповідність регістру чи ні. Ви можете використовувати його так:
String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5)); // true
Він перевіряє, чи є область needle від індексу 0до довжини 5, haystackпочинаючи від індексу 0до довжини 5чи ні. Перший аргумент - trueце означає, що це зробить невідповідність регістру.
І якщо ви лише великий фанат Regex , ви можете зробити щось подібне:
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
(?i) Вбудований прапор призначений для ігнорування відповідності випадків.
System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));не рішення проппер. Ви можете спробувати це: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));з аргументами vm. -Duser.country=TR -Duser.language=tr У цьому прикладі Iверхній регістрi
спробуйте це,
String session = "Session";
if(session.toLowerCase().startsWith("sEsSi".toLowerCase()))
Я знаю, що я спізнююсь, але як бути з використанням StringUtils.startsWithIgnoreCase () від Apache Commons Lang 3?
Приклад:
StringUtils.startsWithIgnoreCase(string, "start");
Просто додайте таку залежність до вашого файлу pom.xml (беручи до уваги гіпотезу, що ви використовуєте Maven):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
Можна використовувати someString.toUpperCase().startsWith(someOtherString.toUpperCase())
string.regionMatches(true, 0, prefix, 0, prefix.length());яке не несе витрат на "нормалізацію" обох рядків.