import java.util.*;
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.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.jsoup.helper.StringUtil;
public class ChinesePinyinUtil {
static HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
static {
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
}
public static String getPolyphonePinyinInitials(String str) {
if (StringUtil.isBlank(str)) {
return "";
}
List<String> resultList = new ArrayList<>();
char[] strChar = str.toCharArray();
for (char s : strChar) {
List<String> pinyinInitialsList = getPinyinInitials(s);
if (pinyinInitialsList.size() > 1) {
String initialSts = StringUtils.join(pinyinInitialsList, ",");
resultList.add(s + "(" + initialSts + ")");
}
}
return StringUtils.join(resultList, "\n");
}
public static String getPinyinInitials(String str) {
if (StringUtils.isBlank(str)) {
return "";
}
List<List<String>> resultList = new ArrayList<>();
char[] strChar = str.toCharArray();
for (char s : strChar) {
List<String> result = getPinyinInitials(s);
resultList.add(result);
}
return parseTheChineseByObject(resultList);
}
private static String parseTheChineseByObject(List<List<String>> list) {
Set<String> result = new HashSet<>();
if (CollectionUtils.isNotEmpty(list)) {
result.addAll(list.get(0));
}
int size = list.size();
for (int i = 1; i < size; i++) {
Set<String> compositePYTemp = new HashSet<String>();
for (String pinyinFast : result) {
for (String c : list.get(i)) {
String str = pinyinFast + c;
compositePYTemp.add(str);
}
}
result = compositePYTemp;
}
return StringUtil.join(result,"\n");
}
public static List<String> getPinyinInitials(char str) {
List<String> pinyinInitialsList = new ArrayList<String>();
HanyuPinyinOutputFormat config = new HanyuPinyinOutputFormat();
config.setCaseType(HanyuPinyinCaseType.LOWERCASE);
config.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
try {
if (String.valueOf(str).matches("[\\u4E00-\\u9FA5]+")) {
String[] pinyinArr = PinyinHelper.toHanyuPinyinStringArray(str, format);
for (String s : pinyinArr) {
char initials = s.charAt(0);
int index = pinyinInitialsList.indexOf(String.valueOf(initials));
if (index < 0) {
pinyinInitialsList.add(String.valueOf(initials));
}
}
} else {
pinyinInitialsList.add(str + "");
}
} catch (BadHanyuPinyinOutputFormatCombination e1) {
System.out.println("获取的字符串中多音字拼音失败了" + e1.getMessage());
}
return pinyinInitialsList;
}
public static void main(String[] args) throws Exception {
String s1 = getPolyphonePinyinInitials("儿干红藏1");
System.out.println(s1);
System.out.println();
String first1 = getPinyinInitials("2红3干4藏1");
System.out.println(first1);
}