java pinyin4j 首字母_通讯录之按汉字首字母排序 --java--pinyin4J
最近開發手機端OA系統通訊錄時遇到了用漢字首字母排序的問題,各種谷歌后發現了一個輪子pinyin4J,這個輪子是可以將漢字轉換成字母拼音,個人覺得很好用,完美的解決了排序的問題,分享一下。
一.工具介紹
pinyin4j是一個支持將簡體和繁體中文轉換到成拼音的Java開源類庫,作者是Li Min (xmlerlimin@gmail.com)。
支持同一漢字有多個發音
還支持拼音的格式化輸出,比如第幾聲之類的,
同時支持簡體中文、繁體中文轉換為拼音…使用起來也非常簡單。下面是其官方網址,其中提供了下載:
本文只是使用了pinyin4J的主要功能,還有更多更好耍的功能,大家可以去研究官網文檔。哈哈
下載解壓后的目錄結構及說明如下
(1) doc : pinyin4j的api文檔
(2) lib : pinyin4j的jar包
(3) src: pinyin4j的源代碼
(4) CHANGELOG.txt : pinyin4j的版本更新日志
(5) COPYING.txt : LICENSE說明
(6) README.txt : pinyin4j的概要介紹
二.轉換代碼 // 獲取漢字的首字母大寫
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) { //如果已經是字母就不用轉換了
try {
//獲取當前漢字的全拼
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') {// 將大寫轉換為小寫
arr[0] += 32;
}*/
pybf.append(arr[i]);
}
}
return pybf.toString();
}復制代碼
三.實現 Comparable 接口并且使用內部類compare重載compareTo方法實現排序代碼。 Collections.sort(list, new Comparator>() {
public int compare(Map o1, Map o2) {
return getFirstSpellOne((String) o1.get("str"))
.compareTo(
getFirstSpellOne((String) o2
.get("str")));
}
});復制代碼
四.測試效果
測試效果
五.那么問題來了
這個列子只能按字符串第一個字符的首字母來排序,比如字符串張三和趙五第一個字符首字母是一樣的,那能不能再通過第二個字符三和五來進行排序吶。如果字符串的第二個字符首字母也是一樣的吶,依次類推。希望哪位大神好的思路交流交流,帶我裝逼帶我飛。。。
六.JUST DO IT
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
最后更新時間:2017年1月5日 22:56
如要轉載請注明出處:z77z.oschina.io/2017/01/05/…
總結
以上是生活随笔為你收集整理的java pinyin4j 首字母_通讯录之按汉字首字母排序 --java--pinyin4J的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cloud一分钟|茅台4.5亿入股云上贵
- 下一篇: 综评:5个方面看刚刚发布的Kuberne