package com.nq.utils.stock.pinyin; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; import java.util.ArrayList; import java.util.Hashtable; import java.util.List; import java.util.Map; public class GetPyByChinese { public static void main(String[] args) { System.out.println(converterToFirstSpell("長沙市長")); System.out.println(converterToFirstSpell("平安銀行")); System.out.println(converterToFirstSpell("老闆電器")); } public static String converterToFirstSpell(String chines) { StringBuffer pinyinName = new StringBuffer(); 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] > '€') { try { String[] strs = PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat); if (strs != null) { for (int j = 0; j < strs.length; j++) { pinyinName.append(strs[j].charAt(0)); if (j != strs.length - 1) { pinyinName.append(","); } } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { pinyinName.append(nameChar[i]); } pinyinName.append(" "); } return parseTheChineseByObject(discountTheChinese(pinyinName.toString())); } private static List> discountTheChinese(String theStr) { List> mapList = new ArrayList>(); Map onlyOne = null; String[] firsts = theStr.split(" "); for (String str : firsts) { onlyOne = new Hashtable(); String[] china = str.split(","); for (String s : china) { Integer count = onlyOne.get(s); if (count == null) { onlyOne.put(s, new Integer(1)); } else { onlyOne.remove(s); Integer integer1=count,integer2=count=Integer.valueOf(count.intValue() + 1); onlyOne.put(s, count); } } mapList.add(onlyOne); } return mapList; } private static String parseTheChineseByObject(List> list) { Map first = null; for (int i = 0; i < list.size(); i++) { Map temp = new Hashtable<>(); if (first != null) { for (String s : first.keySet()) { for (Object s1 : ((Map)list.get(i)).keySet()) { String str = s + s1; temp.put(str, Integer.valueOf(1)); } } if (temp != null && temp.size() > 0) { first.clear(); } } else { for (Object s : ((Map)list.get(i)).keySet()) { String str = (String) s; temp.put(str, Integer.valueOf(1)); } } if (temp != null && temp.size() > 0) { first = temp; } } String returnStr = ""; if (first != null) { for (String str : first.keySet()) { returnStr = returnStr + str + ","; } } if (returnStr.length() > 0) { returnStr = returnStr.substring(0, returnStr.length() - 1); } return returnStr; } }