J2SE並不提供對中文的比較,通過net.sourceforge.pinyin4j包可以輕鬆實現中文的比較。
import net.sourceforge.pinyin4j.PinyinHelper;
public class TestPinyin {
public TestPinyin() {
}
public static void main(String[] args) {
TestPinyin testPinyin = new TestPinyin();
System.out.println("Test compare:");
System.out.println("滬西".compareTo("寶山"));
System.out.println("啊滬西".compareTo("寶山"));
System.out.println("Test Local compare:");
System.out.println(testPinyin.compare("滬西", "寶山"));
System.out.println(testPinyin.compare("啊滬西", "寶山"));
System.out.println(testPinyin.compare("A滬西", "寶山"));
System.out.println(testPinyin.compare("閔行", "上海"));
}
public int compare(String o1, String o2) {
for (int i = 0; i < o1.length() && i < o2.length(); i++) {
char c1 = o1.charAt(i);
char c2 = o2.charAt(i);
String pinyin1 = pinyin(c1);
String pinyin2 = pinyin(c2);
if (pinyin1 != null && pinyin2 != null) {
if (!pinyin1.equals(pinyin2)) {
return pinyin1.compareTo(pinyin2);
}
} else {
if (c1 != c2) {
return c1 - c2;
}
}
}
return o1.length() - o2.length();
}
/**
* 字符的拼音,多音字就得到第一個拼音。不是漢字,就return null。
* @param c
* @return
*/
private String pinyin(char c) {
String[] a = PinyinHelper.toHanyuPinyinStringArray(c);
if (a == null)
return null;
return a[0];
}
}