나는 각각이 중국어 문자 또는 숫자 또는 영어 문자로 구성 될 수있는 문자열 목록을 가지고 있습니다. (예 : "z 莉 z 莉", "露 西", "蒋 豪", "qwer", "zout1iao", "hah"). 내가 원하는 것은 안드로이드의 주소록 앱과 같은 알파벳 순서로 정렬하는 것입니다 (즉, "hah", "蒋 豪", "露 西", "qwer", "z 莉 z 莉", "zout1iao") 그래서 내 전략은 모든 한자를 병음으로 변환 한 다음 평소대로 비교합니다. 라이브러리 yinpin4j를 사용해 보았지만 J2SE 플랫폼에서 잘 작동하지만 Android에서 동일한 코드를 실행하면 오류가 발생합니다. 자바 코드는 다음과 같습니다안드로이드에서 중국어를 어떻게 분류합니까?
@Override
public int compareTo(People another) {
String onePinyin = HanziHelper.words2Pinyin(name);
String theOtherPinyin = HanziHelper.words2Pinyin(another.getName());
return onePinyin.compareTo(theOtherPinyin);
}
private static String char2String(char c) {
StringBuilder sb = new StringBuilder();
return sb.append(c).toString();
}
public static String char2Pinyin(char c) {
String[] pinyin = null;
try {
pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
} catch(BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
if(pinyin == null) {
return char2String(c);
} else {
return pinyin[0];
}
}
public static String words2Pinyin(String words) {
StringBuilder sb = new StringBuilder();
char[] chars = words.toCharArray();
for(int i = 0, length = chars.length; i < length; i++) {
sb.append(char2Pinyin(chars[i]));
}
return sb.toString();
}
오류는 다음과 같습니다
04-15 12:37:15.750: W/System.err(6898): java.io.IOException: BufferedInputStream is closed
04-15 12:37:15.791: W/System.err(6898): at java.io.BufferedInputStream.streamClosed(BufferedInputStream.java:116)
04-15 12:37:15.791: W/System.err(6898): at java.io.BufferedInputStream.read(BufferedInputStream.java:294)
04-15 12:37:15.791: W/System.err(6898): at java.io.InputStreamReader.read(InputStreamReader.java:255)
04-15 12:37:15.791: W/System.err(6898): at java.io.BufferedReader.fillBuf(BufferedReader.java:128)
04-15 12:37:15.791: W/System.err(6898): at java.io.BufferedReader.read(BufferedReader.java:236)
04-15 12:37:15.791: W/System.err(6898): at java.util.Properties.load(Properties.java:307)
04-15 12:37:15.791: W/System.err(6898): at java.util.Properties.load(Properties.java:266)
04-15 12:37:15.791: W/System.err(6898): at net.sourceforge.pinyin4j.ChineseToPinyinResource.initializeResource(Unknown Source)
04-15 12:37:15.791: W/System.err(6898): at net.sourceforge.pinyin4j.ChineseToPinyinResource.<init>(Unknown Source)
04-15 12:37:15.791: W/System.err(6898): at net.sourceforge.pinyin4j.ChineseToPinyinResource.<init>(Unknown Source)
04-15 12:37:15.791: W/System.err(6898): at net.sourceforge.pinyin4j.ChineseToPinyinResource$ChineseToPinyinResourceHolder.<clinit>(Unknown Source)
04-15 12:37:15.791: W/System.err(6898): at net.sourceforge.pinyin4j.ChineseToPinyinResource.getInstance(Unknown Source)
04-15 12:37:15.796: W/System.err(6898): at net.sourceforge.pinyin4j.PinyinHelper.getUnformattedHanyuPinyinStringArray(Unknown Source)
04-15 12:37:15.796: W/System.err(6898): at net.sourceforge.pinyin4j.PinyinHelper.getFormattedHanyuPinyinStringArray(Unknown Source)
04-15 12:37:15.796: W/System.err(6898): at net.sourceforge.pinyin4j.PinyinHelper.toHanyuPinyinStringArray(Unknown Source)
04-15 12:37:15.796: W/System.err(6898): at com.sf.tools.HanziHelper.char2Pinyin(HanziHelper.java:29)
04-15 12:37:15.796: W/System.err(6898): at com.sf.tools.HanziHelper.words2Pinyin(HanziHelper.java:44)
04-15 12:37:15.796: W/System.err(6898): at com.sf.parse.PeopleListParser$Result$People.compareTo(PeopleListParser.java:156)
04-15 12:37:15.796: W/System.err(6898): at com.sf.parse.PeopleListParser$Result$People.compareTo(PeopleListParser.java:1)
04-15 12:37:15.796: W/System.err(6898): at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:286)
04-15 12:37:15.796: W/System.err(6898): at java.util.ComparableTimSort.sort(ComparableTimSort.java:153)
04-15 12:37:15.796: W/System.err(6898): at java.util.ComparableTimSort.sort(ComparableTimSort.java:142)
04-15 12:37:15.796: W/System.err(6898): at java.util.Arrays.sort(Arrays.java:1974)
04-15 12:37:15.796: W/System.err(6898): at java.util.Collections.sort(Collections.java:1941)
04-15 12:37:15.796: W/System.err(6898): at com.sf.activity.PeopleListActivity.initPageView(PeopleListActivity.java:73)
04-15 12:37:15.796: W/System.err(6898): at com.sf.activity.ReceiverListActivity.initPageView(ReceiverListActivity.java:23)
04-15 12:37:15.796: W/System.err(6898): at com.yek.android.base.BaseActivity.onCreate(BaseActivity.java:158)
그럼 난 단지 한자가있는 경우
Collator usCollator = Collator.getInstance(Locale.SIMPLIFIED_CHINESE); usCollator.setStrength(Collator.PRIMARY);
그것은 잘 작동 사용하도록 변경. 위의 예제에서이 메서드는 중국어와 영어를 별도로 정렬합니다.
의견이 있으십니까?
같은 방법으로 중국어와 영어 문자를 정렬 하시겠습니까? – UVM
예, 영어로 함께 정렬 할 수있는 것보다 중국어 문자를 병음으로 변환하십시오. – Longerian
자바에서 operartion을 정렬 할 때 유니 코드 만 사용합니다. 사용자의 로켈에 따라 자동으로 조정 됨. 중국 사용자가 휴대 전화의 로켈을 chinese.Also로 설정하면 정렬 된 텍스트를 볼 수 있음 로캘이 영어로 설정된 경우 기본적으로 정렬 된 것으로 표시됩니다. – UVM