pinyin4j 生成 首字母词组组合 多音字词组组合

目标:词组汉字转拼音首字母组合 (包含多音字)

pinyin4j 有些汉字是多音字会生成多个拼音,首先需要去重;取首字母;然后取组合

一个词组里面建议不要有超过20个多音字;最好多音字5个左右;

如果多音字过多,会产生 翻倍 集合,导致内存泄漏;

如果多音字过多,建议把集合里面的 String 换成 StringBuilder;以后有时间在优化

/**
 * 汉字转换位汉语拼音首字母
 * 英文字符不变,特殊字符丢失 支持多音字
 * 生成方式如(长沙市长:cssc,zssz,zssc,cssz)
 */
public static String converterToFirstSpell(String chines) throws Exception {
	if (StringUtils.isBlank(chines)) {
		return null;
	}
	// 打散字符串
	char[] ziCharArray = chines.toCharArray();
	// 拼音集合
	List<List<String>> list = new ArrayList<List<String>>();
	for (int i = 0; i < ziCharArray.length; i++) {
		// 128 ASCII码 可见字符
		char c = ziCharArray[i];
		if (c > 128) {
			List<String> result = duoYinZi(c);
			list.add(result);
		} else {
			List<String> result = new ArrayList<String>();
			result.add(String.valueOf(ziCharArray[i]));
			list.add(result);
		}
	}
	String result = parseTheChineseByObject(list);
	return result;
}

private static String parseTheChineseByObject(List<List<String>> list) {
	Set<String> result = new HashSet<String>();
	if (CollectionUtils.isNotEmpty(list)) {
		result.addAll(list.get(0));
	}
	for (int i = 1; i < list.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;
	}
	StringBuilder sb = new StringBuilder();
	if (CollectionUtils.isNotEmpty(result)) {
		for (String str : result) {
			sb.append(str).append(",");
		}
		sb.deleteCharAt(sb.length() - 1);
	}
	return sb.toString();
}

public static List<String> duoYinZi(char zi) throws Exception {
	List<String> pinyinName = new ArrayList<String>();
	HanyuPinyinOutputFormat config = new HanyuPinyinOutputFormat();
	// 小写
	config.setCaseType(HanyuPinyinCaseType.LOWERCASE);
	// 没有音调数字
	config.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
	// 取得当前汉字的所有全拼
	String[] pyArray = PinyinHelper.toHanyuPinyinStringArray(zi, config);
	if (pyArray != null && pyArray.length > 0) {
		for (int pyIndex = 0; pyIndex < pyArray.length; pyIndex++) {
			// 取首字母
			char fast = pyArray[pyIndex].charAt(0);
			int index = pinyinName.indexOf(String.valueOf(fast));
			if (index < 0) {
				pinyinName.add(String.valueOf(fast));
			}
		}
	}
	return pinyinName;
}
@Test
public void test12() throws Exception {
	String str = "长沙市长";
	String t = Pinyin4jUtil.converterToFirstSpell(str);
	System.out.println("--->"+t);
}
// 结果
--->zssc,cssz,zssz,cssc

参考文档:http://doc123.top/

要使用 Pinyin4j 获得首字母大写,你可以按照以下步骤进行操作: 1. 先,确保你已经将 Pinyin4j 库添加到你的项目中。 2. 导入所需的类: ```java import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; ``` 3. 创建一个方法来获取字符串的首字母大写: ```java public String getFirstLetterUpperCase(String input) { StringBuilder result = new StringBuilder(); HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); // 设置输出格式为大写 format.setCaseType(HanyuPinyinCaseType.UPPERCASE); // 获取字符串的拼音数组 char[] inputArray = input.toCharArray(); for (char c : inputArray) { try { String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format); // 如果字符是汉字,则取拼音的首字母 if (pinyinArray != null && pinyinArray.length > 0) { result.append(pinyinArray[0].charAt(0)); } else { // 如果不是汉字,则直接将字符添加到结果中 result.append(c); } } catch (Exception e) { // 异常情况下,直接将字符添加到结果中 result.append(c); } } return result.toString(); } ``` 4. 调用方法并传入待处理的字符串: ```java String input = "中国"; String firstLetter = getFirstLetterUpperCase(input); System.out.println(firstLetter); // 输出 "ZG" ``` 这样,你就可以使用 Pinyin4j 获得输入字符串的首字母大写了。记得先将 Pinyin4j 库添加到你的项目中才能正确运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值