Programming

문자열에 포함-대소 문자 무시

procodes 2020. 6. 8. 21:57
반응형

문자열에 포함-대소 문자 무시


 

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

반응형