通訊錄之按漢字首字母排序

來(lái)源自:z77z的小碼窩

最近開(kāi)發(fā)手機(jī)端OA系統(tǒng)通訊錄時(shí)遇到了用漢字首字母排序的問(wèn)題荤西,各種谷歌后發(fā)現(xiàn)了一個(gè)輪子pinyin4J
,這個(gè)輪子是可以將漢字轉(zhuǎn)換成字母拼音退敦,個(gè)人覺(jué)得很好用粘咖,完美的解決了排序的問(wèn)題,分享一下侈百。

一.工具介紹

pinyin4j是一個(gè)支持將簡(jiǎn)體和繁體中文轉(zhuǎn)換到成拼音的Java開(kāi)源類(lèi)庫(kù)瓮下,作者是Li Min (xmlerlimin@gmail.com)。

  • 支持同一漢字有多個(gè)發(fā)音
  • 還支持拼音的格式化輸出设哗,比如第幾聲之類(lèi)的唱捣,
  • 同時(shí)支持簡(jiǎn)體中文、繁體中文轉(zhuǎn)換為拼音…使用起來(lái)也非常簡(jiǎn)單网梢。

本文只是使用了pinyin4J的主要功能震缭,還有更多更好耍的功能,大家可以去研究官網(wǎng)文檔战虏。

下載解壓后的目錄結(jié)構(gòu)及說(shuō)明如下

(1) doc : pinyin4j的api文檔
(2) lib : pinyin4j的jar包
(3) src: pinyin4j的源代碼
(4) CHANGELOG.txt : pinyin4j的版本更新日志
(5) COPYING.txt : LICENSE說(shuō)明
(6) README.txt : pinyin4j的概要介紹

二.轉(zhuǎn)換代碼

// 獲取漢字的首字母大寫(xiě)
public String getFirstSpell(String string) {
  StringBuffer pybf = new StringBuffer();
  char[] arr = string.toCharArray();
  HanyuPinyinOutputFormat defaultFormat = new  HanyuPinyinOutputFormat();
  defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  for (int i = 0; i < arr.length; i++) {
    if (arr[i] > 128) { //如果已經(jīng)是字母就不用轉(zhuǎn)換了
      try {
        //獲取當(dāng)前漢字的全拼
        String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
        if (temp != null) {
          pybf.append(temp[0].charAt(0));// 取首字母 
        }
      } catch (BadHanyuPinyinOutputFormatCombination e) {
        e.printStackTrace();
      }
    } else {
      if (arr[i] >= 'a' && arr[i] <= 'z') {
        arr[i] -= 32;
      }
      /*if (arr[0] >= 'A' && arr[0] <= 'Z') {// 將大寫(xiě)轉(zhuǎn)換為小寫(xiě)
          arr[0] += 32;
      }*/
      pybf.append(arr[i]);
    }
  }
  return pybf.toString();
}

三.實(shí)現(xiàn) Comparable 接口并且使用內(nèi)部類(lèi)compare重載compareTo方法實(shí)現(xiàn)排序代碼拣宰。

Collections.sort(list, new Comparator<Map<String, Object>>() {
  public int compare(Map<String, Object> o1, Map<String, Object> o2) {
    return getFirstSpellOne((String) o1.get("str"))
        .compareTo( getFirstSpellOne((String) o2.get("str")));
  }
});

四.測(cè)試效果

測(cè)試效果

五.那么問(wèn)題來(lái)了

這個(gè)列子只能按字符串第一個(gè)字符的首字母來(lái)排序,比如字符串張三趙五第一個(gè)字符首字母是一樣的烦感,那能不能再通過(guò)第二個(gè)字符來(lái)進(jìn)行排序吶巡社。如果字符串的第二個(gè)字符首字母也是一樣的吶,依次類(lèi)推手趣。希望哪位大神好的思路交流交流晌该,帶我裝逼帶我飛。绿渣。朝群。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市中符,隨后出現(xiàn)的幾起案子姜胖,更是在濱河造成了極大的恐慌,老刑警劉巖淀散,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件右莱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡档插,警方通過(guò)查閱死者的電腦和手機(jī)慢蜓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)阀捅,“玉大人胀瞪,你說(shuō)我怎么就攤上這事。” “怎么了凄诞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵圆雁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我帆谍,道長(zhǎng)伪朽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任汛蝙,我火速辦了婚禮烈涮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窖剑。我一直安慰自己坚洽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布西土。 她就那樣靜靜地躺著讶舰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪需了。 梳的紋絲不亂的頭發(fā)上跳昼,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音肋乍,去河邊找鬼鹅颊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛墓造,可吹牛的內(nèi)容都是我干的堪伍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼觅闽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杠娱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谱煤,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎禽拔,沒(méi)想到半個(gè)月后刘离,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睹栖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年硫惕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片野来。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恼除,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豁辉,我是刑警寧澤令野,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站徽级,受9級(jí)特大地震影響气破,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜餐抢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一现使、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旷痕,春花似錦碳锈、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至佩迟,卻和暖如春团滥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背报强。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工灸姊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秉溉。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓力惯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親召嘶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子父晶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 基本概念 字符(Character) 是各種文字和符號(hào)的總稱(chēng),包括各國(guó)家文字弄跌、標(biāo)點(diǎn)符號(hào)甲喝、圖形符號(hào)、數(shù)字等铛只。 字符集...
    chiguozi閱讀 2,345評(píng)論 0 2
  • 【導(dǎo)語(yǔ)】兄弟一生一起走淳玩,那些日子不再有直撤!也許兄弟在身邊,男人就更有一份自信蜕着,可并不是每個(gè)兄弟都是能夠陪伴你到最后的...
    靦腆的蘑菇魚(yú)閱讀 491評(píng)論 0 0
  • 一大早還在熟睡中。蓖乘。锤悄。模糊中抓起電話。老媽已經(jīng)打來(lái)3個(gè)電話了驱敲,因?yàn)槭庆o音铁蹈。沒(méi)及時(shí)接到,昨晚我們就定好众眨,今早去望海寺...
    梓睿2017閱讀 247評(píng)論 0 1
  • 喝一杯茶 想一些人 麻辣姬絲 朋友送了一包新茶握牧,西湖龍井。坐在電腦前娩梨,靜靜地給自己泡上一杯沿腰,用透明的玻璃杯。我喜歡...
    麻辣姬絲閱讀 541評(píng)論 6 8