一)有一个开源的jar可以使用:pinyin4j,在mvnrepository.com上搜索即可获取pom引用。
下面是自己写的一个简单实例,因为不解决汉字里的多音字问题,所以这里将一些特殊情况自己判断了。
private static Map<String,String> special = new HashMap<>(); static { special.put("重庆","C"); } /** * 提取每个汉字的首字母 * 多音字不好判断 * @param str 输入的字符串 * @return String 输出的 */ public static String getPinYinFirstChar(String str) { if (!StringUtils.isBlank(str)){ if (special.containsKey(str)){ return special.get(str); } char[] charArray = str.toCharArray(); if (charArray.length > 0){ String[] pinyinArray = PinyinHelper.convertToPinyinArray(charArray[0]); if (pinyinArray != null) { return String.valueOf(Character.toUpperCase(pinyinArray[0].charAt(0))); } else { return String.valueOf(charArray[0]); } } } return StringUtils.EMPTY; }
2)引申一下
因为项目里需要根据某列排序,不只是根据首字母,例如 城市拼音分别为 hanzhong,handan,hankou,luoyang排序的话,要严格按照字母序排列:handan,hankou,hanzhong,luoyang。即遇到相等的话继续向后比较。此时根据 PinyinHelper.convertToPinyinArray 获取到全拼音,然后再自己定义一个比较方法:例如 comparator<.char[]>,比较两个字符数组即可。