Я хочу использовать 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());
которое не требует затрат на «нормализацию» обеих строк.