자바 코드 품질 향상:중국어 문자열 정렬 의 하 자
자바 에서 중국어 처 리 를 디자인 하면 많은 문제 가 발생 하 는데 그 중에서 정렬 도 골 치 아 픈 과제 이다.
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 는 한 자 를 병 음 으로 바 꾼 다음 에 우 리 는 스스로 정렬 알고리즘 을 실현 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.