按首字母分组(中文、英文)
1.导入jar包
<!--汉字转拼音-->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
2.工具类,中文拼音分组
/**
* 获取姓名全拼和首字母
*
* @param chinese 汉语名称
* @return fullPinyin : 全拼 simplePinyin : 首字母 groupPinyin:微信用户组第一个字母
* @throws BadHanyuPinyinOutputFormatCombination
*/
public static Map<String, String> changeChinesePinyin(String chinese) throws BadHanyuPinyinOutputFormatCombination {
Map<String, String> pinyin = new HashMap<String, String>();
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
StringBuffer fullPinyin = new StringBuffer();
StringBuffer simplePinyin = new StringBuffer();
StringBuffer firstPinyin = new StringBuffer();
char[] chineseChar = chinese.toCharArray();
for (int i = 0; i < chineseChar.length; i++) {
String[] str = null;
try {
str = PinyinHelper.toHanyuPinyinStringArray(chineseChar[i],
format);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
if (str != null) {
if (str.length == 0) {
continue;
}
fullPinyin = fullPinyin.append(str[0].toString());
simplePinyin = simplePinyin.append(str[0].charAt(0));
}
if (str == null) {
String regex = "^[0-9]*[a-zA-Z]*+$";
Pattern pattern = Pattern.compile(regex);
Matcher m = pattern.matcher(String.valueOf(chineseChar[i]));
if (m.find()) {
fullPinyin = fullPinyin.append(chineseChar[i]);
simplePinyin = simplePinyin.append(chineseChar[i]);
}
}
}
String[] name = PinyinHelper.toHanyuPinyinStringArray(chineseChar[0], format);
firstPinyin = firstPinyin.append(name[0].charAt(0));
pinyin.put("fullPinyin", fullPinyin.toString());
pinyin.put("simplePinyin", simplePinyin.toString().toUpperCase());
pinyin.put("groupPinyin", firstPinyin.toString().toUpperCase());
return pinyin;
}
/**
* 按拼音首字母分组
*
* @param list
* @return
* @throws BadHanyuPinyinOutputFormatCombination
*/
public static Map<String, Object> getCodeGroup(List<String> list) throws BadHanyuPinyinOutputFormatCombination {
Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
//按字母排序
Collections.sort(list, com);
//输出26个字母
Map<String, Object> map = new TreeMap<String, Object>();
for (int i = 1; i <= 26; i++) {
String word = String.valueOf((char) (96 + i)).toUpperCase();
//循环找出首字母一样的数据
List<String> letter = new ArrayList<String>();
for (String str : list) {
String code = changeChinesePinyin(str).get("groupPinyin");
if (word.equals(code)) {
letter.add(str);
}
System.out.println(str);
}
map.put(word, letter);
}
System.out.println(map);
return map;
}
英文分组
/**
* 按英文首字母分组
*
* @param list
* @return
* @throws BadHanyuPinyinOutputFormatCombination
*/
public static Map<String, Object> getCodeGroupEn(List<String> list) {
//输出26个字母
Map<String, Object> map = new TreeMap<String, Object>();
for (int i = 1; i <= 26; i++) {
String word = String.valueOf((char) (96 + i)).toUpperCase();
//循环找出首字母一样的数据
List<String> codeList = new ArrayList<String>();
for(String str : list){
char[] letters = str.toCharArray();
for(char letter : letters){
if(String.valueOf(letter).equals(word)){
codeList.add(str);
}
}
}
map.put(word, codeList);
}
System.out.println(map);
return map;
}