반응형
문자열에 포함-대소 문자 무시
이 질문에는 이미 답변이 있습니다.
str1="ABCDEFGHIJKLMNOP"
문자열에 문자열 패턴이 포함되어 있는지 확인할 수
strptrn="gHi"
있습니까? 문자가 대소 문자를 구분할 수 없는지 알고 싶었습니다. 그렇다면 어떻게?
당신이 사용할 수있는
org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
CharSequence searchStr);
CharSequence에 대소 문자와 상관없이 검색 CharSequence가 포함되어 있는지 확인하고 null을 처리합니다. 대 / 소문자 구분은 String.equalsIgnoreCase (String)에 의해 정의됩니다.null CharSequence는 false를 반환합니다.
정규식은 항상
성능면에서 비싸기 때문에 이것은 정규식보다 낫습니다 .공식 문서는 StringUtils.containsIgnoreCase를 참조하십시오.
업데이트 :
당신이 그들 중 하나라면
- Apache Commons 라이브러리를 사용하고 싶지 않습니다
- 값 비싼
regex/Pattern
솔루션을 원치 않고 - 을 사용하여 추가 문자열 객체를 만들고 싶지 않습니다
toLowerCase
.
java.lang.String.regionMatches를
containsIgnoreCase
사용하여 사용자 정의 를 구현할 수 있습니다.
public boolean regionMatches(boolean ignoreCase,
int toffset,
String other,
int ooffset,
int len)
ignoreCase
: true 인 경우 문자를 비교할 때 대소 문자를 무시합니다.
public static boolean containsIgnoreCase(String str, String searchStr) {
if(str == null || searchStr == null) return false;
final int length = searchStr.length();
if (length == 0)
return true;
for (int i = str.length() - length; i >= 0; i--) {
if (str.regionMatches(true, i, searchStr, 0, length))
return true;
}
return false;
}
정규식을 사용하지 않으면 :
"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())
대소 문자를 구분하지 않는 일치를 위해 java.util.regex.Pattern을 CASE_INSENSITIVE 플래그와 함께 사용할 수 있습니다.
Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find();
이 시도
public static void main(String[] args)
{
String original = "ABCDEFGHIJKLMNOPQ";
String tobeChecked = "GHi";
System.out.println(containsString(original, tobeChecked, true));
System.out.println(containsString(original, tobeChecked, false));
}
public static boolean containsString(String original, String tobeChecked, boolean caseSensitive)
{
if (caseSensitive)
{
return original.contains(tobeChecked);
}
else
{
return original.toLowerCase().contains(tobeChecked.toLowerCase());
}
}
최적화 된 Imran Tariq 버전
Pattern.compile(strptrn, Pattern.CASE_INSENSITIVE + Pattern.LITERAL).matcher(str1).find();
인용 할 내용이없는 경우에도 Pattern.quote (strptrn)은 항상 "\ Q"+ s + "\ E"를 반환하며 연결은 성능을 손상시킵니다.참고 URL :
https://stackoverflow.com/questions/14018478/string-contains-ignore-case
반응형
'Programming' 카테고리의 다른 글
"camelCase"를 "Camel Case"로 변환하는 방법? (0) | 2020.06.08 |
---|---|
애니메이션없이 활동 전환 (0) | 2020.06.08 |
Virtualenv 명령을 찾을 수 없음 (0) | 2020.06.08 |
파이썬 :리스트에서 요소 찾기 (0) | 2020.06.08 |
서버를 다시 시작하지 않고 Jenkins에서 막을 수없는 좀비 작업을 중지하는 방법은 무엇입니까? (0) | 2020.06.08 |