2014-11-24 4 views
0

저는 Java로 코딩하고 있으며 대부분의 배열을 Arrays.equals과 비교할 수 있다는 것을 잘 알고 있습니다. 문자열 케이스를 무의식적으로 String.equalsIgnoreCase과 비교할 수는 있지만 문자열의 배열을 insensitively 비교하는 방법이 있습니까?대소 문자를 구분하지 않는 문자열 배열 비교

샘플 코드 :

class Foo { 
    String[] array; // don't care about case 

    @Override 
    public boolean equals(Foo obj) { 
     // bunch of stuff to check equality 
     if (!Arrays.equals(array, obj.array)) return false; // case insensitive? 
     return true; 
    } 
} 
+2

을 쓰는 당신은 루프를 사용하여, 스스로를해야 할 것이다. 질문하는 것보다 빠를 수 있어야합니다. –

+0

유 링크를 사용할 수 있습니다. http://stackoverflow.com/questions/15269723/array-contains-without-case-sensitive-lookup – Shriram

+0

당신이 말한 것을 기반으로 ... 배열을 동시에 반복하고'String. 각 요소에 대해 "equalsIgnoreCase'를 사용하십시오. – nem035

답변

0

귀하의 코드는 늘 당신이 개체의 비교를 할 수 또한

public boolean equals(Object obj) 같은 서명이 방법을 동일 오버라이드 (override)하지 않는 한 컴파일, 당신은 당신의 수정 등호에서 다음을 수행 할 수 아래처럼 :

if (array == foo.array) { 
    return true; 
} 

if (array == null || foo.array == null) { 
    return false; 
} 

int length = array.length; 

if (foo.length != length) 
     return false; 

    for (int i=0; i<length; i++) { 
     String string1 = array[i]; 
     String string2 = foo.array[i]; 
     if (!(string1==null ? string2==null : string1.equalsIgnoreCase(string2))) 
      return false; 
    } 
return true; 
0

그런 것들을 위해 나는 정적 비교기 방법을 정의하는 유틸리티 클래스를 유지한다. 민감한 비교는 유형별 로직이 아니며 프로그램의 다른 곳에서 재사용 할 수 있습니다.

public static boolean caseInsensitiveCompare(String[] array1, String[] array2) { 
    // validate arguments 
    condition(allNotNullOrEmpty(array1) && allNotNullOrEmpty(array2)); 

    if (array1 == array2) return true; 
    if (array1.length != array2.length) return false; 

    for (int i = 0; i < array1.length; i++) { 
     if (!array1[i].equalsIgnoreCase(array2[i])) return false; 
    } 

    return true; 
} 

P. 대신

if (!Arrays.equals(array, obj.array)) return false; // case insensitive? 
    return true; 

쓰기이

return !Arrays.equals(array, obj.array); 

또는 사용 인 IntelliJ :

관련 문제