Я хочу использовать string.startsWith()метод, но игнорирую случай.
Предположим, у меня есть String"Session" и я использую startsWith"sEsSi", тогда он должен вернуться true.
Как я могу этого добиться?
Я хочу использовать string.startsWith()метод, но игнорирую случай.
Предположим, у меня есть String"Session" и я использую startsWith"sEsSi", тогда он должен вернуться true.
Как я могу этого добиться?
Ответы:
Используйте toUpperCase()или, toLowerCase()чтобы стандартизировать вашу строку перед ее тестированием.
String.equalsIgnoreCase()вы обнаружите , что вам нужно сравнить как строчные , так и прописные версии строк , прежде чем окончательно вернуться false. См. Stackoverflow.com/a/38947571/14731 для альтернативного ответа.
"İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())(в среде Locale.Turkish), это даст мне false.
Один из вариантов - преобразовать их оба в нижний или верхний регистр:
"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());которое не требует затрат на «нормализацию» обеих строк.