<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-16  評論-50  文章-2  trackbacks-0

    摘要:中文一般都是按拼音來排序的。但Java中的String類是按Unicode編碼存儲數據的,因此,String類也是按Unicode編碼的大小來排序的。Sun公司提供一個Collator類來重新按不同的規則對字符串排序,但Collator對中文的排序方式只是不嚴格的拼音排序法。Microsoft的Excel和Sql Server實現了按拼音排序的功能,就比Collator實現的好多了。那如何在Java中實現類似Microsoft的拼音排序的方式呢?


    作者:Jeff 發表于:2007-12-19 08:30 最后更新于: 2007年12月21日 12:33
    版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本版權聲明
    http://www.tkk7.com/jeff-lau/archive/2007/12/19/168637.html


    合并了

    已經將《中文排序--筆畫》和《中文排序--漢語拼音》修改并合并《中文排序》中。這里只保留最后的代碼。實現的原理和方法請見中文排序

    /**
      * @author Jeff
      *
      * Copyright (c) 復制或轉載本文,請保留該注釋。
      */
    package chinese.utility;

    import java.util.Comparator;
    import net.sourceforge.pinyin4j.PinyinHelper;

    public class PinyinComparator implements Comparator<String> {

        public int compare(String o1, String o2) {

            for (int i = 0; i < o1.length() && i < o2.length(); i++) {

                int codePoint1 = o1.charAt(i);
                int codePoint2 = o2.charAt(i);

                if (Character.isSupplementaryCodePoint(codePoint1)
                        || Character.isSupplementaryCodePoint(codePoint2)) {
                    i++;
                }

                if (codePoint1 != codePoint2) {
                    if (Character.isSupplementaryCodePoint(codePoint1)
                            || Character.isSupplementaryCodePoint(codePoint2)) {
                        return codePoint1 - codePoint2;
                    }

                    String pinyin1 = pinyin((char) codePoint1);
                    String pinyin2 = pinyin((char) codePoint2);

                    if (pinyin1 != null && pinyin2 != null) { // 兩個字符都是漢字
                        if (!pinyin1.equals(pinyin2)) {
                            return pinyin1.compareTo(pinyin2);
                        }
                    } else {
                        return codePoint1 - codePoint2;
                    }
                }
            }
            return o1.length() - o2.length();
        }

        /**
         * 字符的拼音,多音字就得到第一個拼音。不是漢字,就return null。
         */
        private String pinyin(char c) {
            String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c);
            if (pinyins == null) {
                return null;
            }
            return pinyins[0];
        }
    }

    posted on 2007-12-19 08:30 Jeff Lau 閱讀(5530) 評論(3)  編輯  收藏 所屬分類: 跟老劉學Java

    評論:
    # re: 中文排序 - 漢語拼音[未登錄] 2007-12-19 09:04 | stone
    有意思,受教了  回復  更多評論
      
    # re: 中文排序 - 漢語拼音 2007-12-19 10:05 | 千里冰封
    呵呵,有意思  回復  更多評論
      
    # re: 中文排序 - 漢語拼音[未登錄] 2012-06-11 16:58 | 111
    很干凈
    飛過海
    啊啊  回復  更多評論
      
    主站蜘蛛池模板: 国产资源免费观看| 暖暖免费高清日本一区二区三区| 亚洲综合另类小说色区色噜噜| 亚洲 暴爽 AV人人爽日日碰| 91成人免费观看网站| 亚洲高清一区二区三区| 四色在线精品免费观看| 亚洲Av永久无码精品黑人| 国产特级淫片免费看| 免费一级特黄特色大片| 国产亚洲精品高清在线| 国产无遮挡无码视频免费软件| 久久精品国产亚洲AV麻豆~| 国产精品白浆在线观看免费| 亚洲精品在线免费观看| 日韩毛片免费在线观看| 特级无码毛片免费视频| 亚洲日韩中文无码久久| 亚洲视频免费播放| 亚洲成在人线aⅴ免费毛片| 国产国拍亚洲精品福利 | 美女视频黄a视频全免费网站色| 免费在线看片网站| 久久久久久久国产免费看 | 国产麻豆免费观看91| 日韩免费在线中文字幕| 亚洲国产无套无码av电影| 免费看男人j放进女人j免费看| 亚洲二区在线视频| 亚洲色欲久久久久综合网| 99热在线观看免费| 亚洲精品无码人妻无码| 国产AV无码专区亚洲AV漫画| 1a级毛片免费观看| 黄色网页免费观看| 在线电影你懂的亚洲| 日韩精品亚洲专区在线观看| 亚洲啪啪免费视频| 无遮挡a级毛片免费看| 亚洲最大视频网站| 亚洲综合伊人久久大杳蕉|