자바 코드 품질 향상:중국어 문자열 정렬 의 하 자

분석 
자바 에서 중국어 처 리 를 디자인 하면 많은 문제 가 발생 하 는데 그 중에서 정렬 도 골 치 아 픈 과제 이다. 
Arrays 도구 류 의 기본 정렬 은 배열 요소 의 copare To 방법 을 통 해 비교 되 는 것 을 알 고 있 습 니 다.String 류 의 copare To 방법의 주요 실현 을 살 펴 보 겠 습 니 다. 
while(k < lim){ 
    //          
    char c1 = v1[k]; 
    //           
    char c2 = v2[k]; 
 
    if(c1 != c2){ 
        //     char    
        return c1 - c2; 
    } 
    k++ 
} 

이것 은 먼저 문자 배열 을 얻 은 다음 에 하나씩 크기 를 비교 합 니 다.여 기 는 문자 비교(마이너스 연산 자),즉 UNICODE 코드 값 비교 입 니 다. 
장면 
우 리 는 다음 과 같은 코드 를 본다. 
public static void main(String[] args){ 
    String[] strs = {"  (Z)","  (L)","  (W)"}; 
    //  ,      
    Arrays.sort(strs); 
 
    int i = 0; 
    for(String str:strs){ 
        System.out.println((++i) + "、" + str); 
    } 
} 

결과: 
1.장삼(Z) 
2.이사(L) 
3.왕 오(W) 
위 에서 Arrays.sort()가 배열 요 소 를 사용 하 는 compareTo 방법 을 분석 하여 비교 한 결과 문자 배열 의 UNICODE 코드 값 을 비교 하고 UNICODE 코드 표를 찾 아 보 니'장'의 코드 값 은 5F 20 이 고'이'는 674 E 이다.이렇게 보면'장'이'앞 에 있 는 것 도 정확 하 다. 
 
그러나 이것 은 우리 의 의도 와 충돌 한 다 는 점 은 JDK 문서 에서 도 설명 되 어 있 습 니 다.영어 가 아 닌 String 정렬 에 대해 정확 하지 않 은 상황 이 발생 할 수 있 습 니 다. 
그럼 어떻게 해결 할 까요?자바 는 Collator 클래스 를 사용 하여 정렬 하 는 것 을 추천 합 니 다.코드 수정 은 다음 과 같 습 니 다. 
public static void main(String[] args)throws Exception{ 
    String[] strs = {"  (Z)","  (L)","  (W)"}; 
    //          
    Comparator c = Collator.getInstance(Local.CHINA); 
    //     
    Arrays.sort(strs,c); 
 
    int i = 0; 
    for(String str:strs){ 
        System.out.println((++i) + "、" + str); 
    } 
} 

결과: 
1.이사(L) 
2.왕 오(W) 
3.장삼(Z) 
그러나 한 자 는 상행 문자,음 행 분리 가 있 음 을 주의 하 세 요.모든 한자 가 병 음의 순서에 따라 정렬 할 수 있 는 것 이 아니다.예 를 들 어'번'과'흠'이다. 
건의 
정렬 대상 이 자주 사용 하 는 한자 라면 Collator 류 로 정렬 하면 우리 의 요 구 를 만족 시 킬 수 있 습 니 다.만약 에 엄격 한 정렬 이 필요 하 다 면 오픈 소스 프로젝트 를 사용 하여 이 루어 져 야 한다.예 를 들 어 pinyin4j 는 한 자 를 병 음 으로 바 꾼 다음 에 우 리 는 스스로 정렬 알고리즘 을 실현 할 수 있다.

좋은 웹페이지 즐겨찾기