7
Android에서 국제 문자열을 올바르게 정렬하는 방법이 있습니까? 맞춤형 비교기와 compareTo()
메서드를 사용하지만 충분하지 않습니다. 이 "ö"와 같은 글자를 "o"근처에 표시하고 싶지만 모두 목록 끝에 있습니다. 비교기가 "o, a, ... 등"과 유사하다고 생각하도록하려면 어떻게해야합니까?Android는 특수 문자를 비교합니다
Android에서 국제 문자열을 올바르게 정렬하는 방법이 있습니까? 맞춤형 비교기와 compareTo()
메서드를 사용하지만 충분하지 않습니다. 이 "ö"와 같은 글자를 "o"근처에 표시하고 싶지만 모두 목록 끝에 있습니다. 비교기가 "o, a, ... 등"과 유사하다고 생각하도록하려면 어떻게해야합니까?Android는 특수 문자를 비교합니다
로캘 인식 문자열 실행에를 사용합니다. 문서에서 :
로캘 구분 문자열 비교를 수행합니다. 구체 서브 클래스 인 RuleBasedCollator는 에 의한 정렬 순서 지정의 사용자 정의를 허용합니다. 비교 문자열
예 :
Collator deCollator = Collator.getInstance(Locale.GERMANY); // or new Locale("pl", "PL") for polish locale ;)
System.out.println(deCollator.compare("abcö", "abco"));
인쇄 1
. 당신은 레이터 이상 사용 문자열 목록을 정렬하려면
, 당신은 쓸 수 있습니다 :
final List<String> strings = Arrays.asList(
"über", "zahlen", "können", "kreativ", "Äther", "Österreich");
Collections.sort(strings, deCollator); // Collator implements Comparator
System.out.println(strings);
인쇄 :
[Äther, können, kreativ, Österreich, über, zahlen]
편집 : 그냥 당신이 폴란드어 것을 발견 , 폴란드어 예 :
final List<String> strings = Arrays.asList(
"pięć", "piec", "Pieczka", "pięść", "pieczęć", "pieczątka");
Collections.sort(strings, Collator.getInstance(new Locale("pl", "PL")));
System.out.println(strings);
// output: [piec, pieczątka, pieczęć, Pieczka, pięć, pięść]
멋진 답변을 보내 주셔서 감사합니다. ;) 실제로, 나는 더 단순한 해결책을 발견했다 : Collator collator = Collator.getInstance(); collator.setDecomposition (Collator.CANONICAL_DECOMPOSITION); collator.compare (one, two)'두 번째 예제는 CANONICAL_DECOMPOSITION 룰이하는 일을 보여준다 : http://developer.android.com/reference/java/text/Collator.html – lomza
'Collator.getInstance)'명시 적으로'Locale'이 없으면 환경 의존적이다 : ** 사용자의 디폴트 로케일 **에 적합한 Collator 인스턴스를 반환한다. "[기본 로케일을 경계하십시오] (http://developer.android.com/reference/java/util/Locale.html#default_locale)"._ – Xaerxess
경고를 보내 주셔서 감사합니다. 그러나 나는 의심의 여지가 있습니다. 정렬 된 데이터는 사용자에게 표시 할 때만 필요하며 다른 곳으로 보내지 않거나 무언가를 계산하지 않아도됩니다 ... 기본 로케일로 충분할까요? 그러나 독일어와 덴마크 문자를 올바르게 분류하여 기계 출력으로 사용하려면 'Local.US' 로케일을 사용하는 것이 가장 좋습니다. – lomza