介绍一个文字按首字母排序的方法 之前用的比较常见的 自定义工具类 但是对一些生僻字和多音字排序效果不好 所以换了使用第三方排序
首先 库
compile 'com.belerweb:pinyin4j:2.5.0'
有2个文件
/** * * * 汉字转换位汉语拼音,英文字符不变 * */ public class PinYin { public static StringBuffer sb = new StringBuffer(); /** * * * 获取汉字字符串的首字母,英文字符不变 * * 例如:阿飞→af * */ public static String getPinYinHeadChar(String chines) { sb.setLength(0); char[] chars = chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < chars.length; i++) { if (chars[i] > 128) { try { sb.append(PinyinHelper.toHanyuPinyinStringArray(chars[i], defaultFormat)[0].charAt(0)); } catch (Exception e) { e.printStackTrace(); } } else { sb.append(chars[i]); } } return sb.toString(); } /** * * * 获取汉字字符串的第一个字母 * */ public static String getPinYinFirstLetter(String str) { sb.setLength(0); char c = str.charAt(0); String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c); if (pinyinArray != null) { sb.append(pinyinArray[0].charAt(0)); } else { sb.append(c); } return sb.toString(); } /** * * * 获取汉字字符串的汉语拼音,英文字符不变 * */ public static String getPinYin(String chines) { sb.setLength(0); char[] nameChar = chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < nameChar.length; i++) { if (nameChar[i] > 128) { try { sb.append(PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0]); } catch (Exception e) { e.printStackTrace(); } } else { sb.append(nameChar[i]); } } return sb.toString(); } }
/** * * @author * */ public class PinyinComparator implements Comparator<Site> { public int compare(Site o1, Site o2) { if (o1.getFirstCharacter().equals("@") || o2.getFirstCharacter().equals("#")) { return -1; } else if (o1.getFirstCharacter().equals("#") || o2.getFirstCharacter().equals("@")) { return 1; } else { return o1.getFirstCharacter().compareTo(o2.getFirstCharacter()); } } }
使用的时候
// 汉字转换成拼音 String pinyin = PinYin.getPinYin(这里是需要转的文字);//转换后的首字母 用于排序 String sortString = pinyin.substring(0, 1).toUpperCase();
使用很简单 在打包的时候 可能报一个error 说这个第三方有文件重复 这个问题也研究了好久 在gradle
文件中加入去重复的属性
packagingOptions { exclude 'META-INF/maven/com.belerweb/pinyin4j/pom.xml' exclude 'META-INF/maven/com.belerweb/pinyin4j/pom.properties' }
位置如下
个人使用感觉比之前的字母排序工具类要准确的多