中文字符串比較

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];
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章