string.startsWith()
방법 을 사용하고 싶지만 케이스를 무시합니다.
String
"Session"이 있고 startsWith
"sEsSi"에서 사용 한다고 가정 하면 true
.
이것을 어떻게 할 수 있습니까?
string.startsWith()
방법 을 사용하고 싶지만 케이스를 무시합니다.
String
"Session"이 있고 startsWith
"sEsSi"에서 사용 한다고 가정 하면 true
.
이것을 어떻게 할 수 있습니까?
답변:
테스트하기 전에 toUpperCase()
또는 toLowerCase()
을 사용 하여 문자열을 표준화하십시오.
String.equalsIgnoreCase()
비교해야한다는 것을 알게 될 것 입니다. 다른 답변 은 stackoverflow.com/a/38947571/14731 을 참조하십시오 . false
"İ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
늦었다는 것을 알고 있지만 Apache Commons Lang 3에서 StringUtils.startsWithIgnoreCase ()를 사용하는 것은 어떻습니까?
예 :
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());
두 문자열을 "정규화"하는 비용이 발생하지 않는 사용 하는 것입니다.