2014-09-25 3 views
0

프로젝트 용 Java에서 메모리 내장 파일 시스템을 구축 중이며 현재 이진 검색을 사용하여 노드를 찾고 있지만 버그를 찾고있을 때 노드를 발견했습니다. 대문자는 유니 코드에서의 위치 때문에 목록의 시작 부분으로 정렬됩니다. 이것은 여전히 ​​이진 검색에 노드를 찾기 위해 잘 작동하지만,이 알파벳 순으로 정렬 목록을 나타내야하는 동안이 예를 들어, 허용되지 않습니다 :하는 것Java에서 검색/정렬 및 문자열 인코딩

Hosts.txt abc home settings.txt 

는 내가 생각하고있어 (이론적으로) 가장 쉬운 해결책이 될 것입니다 문자열을 문자 세트에 다음과 같이 배치하십시오.

aAbBcCdDeEfFgGhHiIjJkKlLmM... and so on with special characters and such included 

쉽게 또는 더 나은 방법으로이를 수행 할 수있는 방법이 있습니까?

+0

어떻게 문자열을 정렬합니까? – DeiAndrei

+0

이진 검색을 사용하여 목록에 삽입 할 위치를 찾습니다. 그러나 'A'와 'a'의 차이가 전체 알파벳이기 때문에 문제의 일부입니다. 유니 코드 문자열을 사용하는 바이너리 검색은 요청한대로 목록을 정렬하지 못합니다. – Linuxxon

+0

일부 코드는 분명 도움이 될 수 있지만 문자열을 비교해야합니다 대/소문자를 구분하지 않는 이진 검색 – DeiAndrei

답변

0

당신은 당신의 자신의 비교를 정의해야합니다 :

public class MyStringComparator implements Comparator<String> { 

    @Override 
    public int compare(String s1, String s2) { 

     int caseIgnoreResult = s1.compareToIgnoreCase(s2); 
     if (caseIgnoreResult == 0) { 
      return s1.compareTo(s2); 
     } 
     else { 
      return caseIgnoreResult; 
     } 
    } 
} 

도움이 되었기를 바랍니다.

+0

과 대소 문자를 구분하지 않는 문자열 중에서 올바른 위치를 찾습니다.하지만 대소 문자를 구분해야합니다. "aB "및"Ab "는 동일한 것으로 간주되어 내 바이너리 검색을 손상시킵니다. – Linuxxon

+0

compareToIgnoreCase가 0을 반환하면 (대문자와 소문자를 구별하지 않음으로써 문자열이 동일 함) compareTo()로 다시 동등성을 테스트하십시오. – DeiAndrei

+0

@Linuxxon 내 답변을 편집 했으므로 실제로 찾고있는 것이기를 바랍니다. – DeiAndrei