<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://m.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
    很干凈
    飛過海
    啊啊  回復  更多評論
      
    主站蜘蛛池模板: 91精品免费观看| 国产一级片免费看| 妞干网免费观看视频| 亚洲va在线va天堂成人| 91精品免费国产高清在线| 亚洲美女自拍视频| 99在线观看视频免费| 婷婷精品国产亚洲AV麻豆不片| 国产亚洲精品免费视频播放| 伊人久久大香线蕉亚洲| 福利免费在线观看| 亚洲色欲久久久综合网| 日韩精品无码免费专区午夜不卡| 亚洲精品夜夜夜妓女网| 久草免费手机视频| 亚洲大香伊人蕉在人依线| 最近中文字幕mv免费高清视频7| 亚洲色中文字幕在线播放| 色吊丝最新永久免费观看网站 | 91亚洲导航深夜福利| 国产中文字幕在线免费观看| 亚洲 小说区 图片区 都市| 男女猛烈xx00免费视频试看| 国产成人一区二区三区免费视频| 亚洲国产精品美女久久久久| 午夜免费福利在线| 日日摸日日碰夜夜爽亚洲| 免费国产高清视频| 九九九精品视频免费| 久久亚洲av无码精品浪潮| 免费国产va在线观看| 国产精品无码一区二区三区免费 | 亚洲精品无码av天堂| 中文字幕av无码不卡免费| 亚洲成Av人片乱码色午夜| 久久久99精品免费观看| 亚洲另类古典武侠| 韩国日本好看电影免费看| 一级女人18片毛片免费视频| 久久国产精品亚洲综合| 国产一卡2卡3卡4卡无卡免费视频|