通过pinyin4j将汉字转换为全拼 和 拼音首字母
/**
* 汉字转换为拼音 包含多音字,包含生母zh,ch,sh的
*/
public void toPinYinAll(){
String initials = "zh,ch,sh";
//返回汉语拼音的全拼
List<String> result = new ArrayList<String>();
//返回汉语拼音的单拼
List<String> firstResult = new ArrayList<String>();
result.add("");
firstResult.add("");
String text = "我重情长"; char[] t1 = null;
t1 = text.toCharArray(); //设置汉字拼音的输出格式
HanyuPinyinOutputFormat hf = new HanyuPinyinOutputFormat();
//设置输出类型为小写
hf.setCaseType(HanyuPinyinCaseType.LOWERCASE);
//设置音标类型为无音标
hf.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
//设置 吕中u转换为v
hf.setVCharType(HanyuPinyinVCharType.WITH_V); StringBuilder sb = new StringBuilder();
for(char c : t1){
//判断是否是汉字
if(Character.toString(c).matches("[\\u4E00-\\u9FA5]+")){
try {
String[] t2 = PinyinHelper.toHanyuPinyinStringArray(c, hf);
//去掉 多音词中 拼音相同 声调不同的重复拼音
Set<String> set = new HashSet<String>();
set.addAll(Arrays.asList(t2));
t2 = set.toArray(new String[0]);
if(t2!=null && t2.length>1){
List<String> temp = new ArrayList<String>();
List<String> firstTemp = new ArrayList<String>();
temp.addAll(result);
firstTemp.addAll(firstResult);
for(int i=0;i<t2.length;i++){
int n = result.size();
String token = t2[i];
String firstToken = ""+token.charAt(0);
if(initials.contains(token.substring(0, 2))){
firstToken = token.substring(0, 2);
}
if(i==0){
for(int j=0;j<n;j++){
String s = result.get(j);
result.remove(j);
result.add(j, s+token); String fs = firstResult.get(j);
firstResult.remove(j);
firstResult.add(j, fs+firstToken);
}
}else{
for(int j=0;j<n;j++){
String s = temp.get(j);
temp.remove(j);
temp.add(j, s+token); String fs = firstTemp.get(j);
firstTemp.remove(j);
firstTemp.add(j, fs+firstToken);
}
result.addAll(temp);
firstResult.addAll(firstTemp);
}
}
}else{
int n = result.size();
for(int i=0;i<n;i++){
String s = result.get(i);
result.remove(i);
result.add(i, s+t2[0]); String firstToken = ""+t2[0].charAt(0);
if(initials.contains(t2[0].substring(0, 2))){
firstToken = t2[0].substring(0, 2);
}
String fs = firstResult.get(i);
firstResult.remove(i);
firstResult.add(i, fs+firstToken);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
}else{
int n = result.size();
for(int i=0;i<n;i++){
String s = result.get(i);
result.remove(i);
result.add(i,s+String.valueOf(c));
}
}
}
System.out.println(result.toString());
System.out.println(firstResult.toString());
}
结果:
[wozhongqingzhang, wochongqingzhang, wozhongqingchang, wochongqingchang]
[wzhqzh, wchqzh, wzhqch, wchqch]
通过pinyin4j将汉字转换为全拼 和 拼音首字母的更多相关文章
- JAVA将汉字转换为全拼以及返回中文的首字母,将字符串转移为ASCII码
import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseT ...
- 【Java】使用pinyin4j获取汉字的全拼或首字母
汉字转拼音的工具类,常用于做汉字拼音的模糊查询. https://www.cnblogs.com/htyj/p/7891918.html
- C# 获取汉字的拼音首字母和全拼(含源码)
C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手 ...
- oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)
oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等) 效果如下: Oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下 Sql代码 --oracle汉字转拼 ...
- C# 获取汉字拼音首字母/全拼
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...
- vue 获取汉字的全拼、简拼、首拼
1.封装公共方法,获取汉字的全拼.简拼.首拼 export const Pinyin = { _JMcode:{ "-":"", "—":& ...
- c#汉字转拼音首字母全拼支持多音字
1.首先在NuGet安装pingyinConverter 2.下载-安装-引用ChineseChar.dll到项目中 官网了解:http://www.microsoft.com/zh-cn/downl ...
- js汉语转拼音(全拼、首字母、拼音首字母)
新建js文件first_alphabet.js // JavaScript Document // 汉字拼音首字母列表 本列表包含了20902个汉字,用于配合 ToChineseSpell //函数使 ...
- C#将汉字转换成全拼的拼音EcanConvertToCh帮助类 (转)
点击下载 EcanConvertToCh.rar 主要功能就是将汉字转换成全拼的拼音,只要你输入一个汉字就会相应的转成拼音 /// <summary> /// 编 码 人:苏飞 /// 联 ...
随机推荐
- CSS 居中大全
<center> text-align:center 在父容器里水平居中 inline 文字,或 inline 元素 vertical-align:middle 垂直居中 inline 文 ...
- HD1000A + B Problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...
- python知识点(07-08)
python: 循环else: while true: if x>1: print() break else: print() 文件循环: for line in open(‘test.txt’ ...
- labview图形和图表的类型
http://zone.ni.com/reference/zhs-XX/help/371361L-0118/lvconcepts/types_of_graphs_and_charts/ LabVIEW ...
- CodeForces 709A Juicer (水题, 模拟)
题意:给定 n 个桔子的大小,一个杯子的容积,一个最大限度,挨着挤桔子汁,如果大小大于限度,扔掉,如果不杯子满了倒掉,问你要倒掉多少杯. 析:直接按要求模拟就好,满了就清空杯子. 代码如下: #pra ...
- [LeetCode] Consecutive Numbers 连续的数字 --数据库知识(mysql)
1. 题目名称 Consecutive Numbers 2 .题目地址 https://leetcode.com/problems/consecutive-numbers/ 3. 题目内容 写一个 ...
- 如何设置Grunt
原文地址: Step 1: Install Node.js Download a Node installer and run it. Installation packages are availa ...
- 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证-2.2身份验证开发]
2.2身份验证开发 在我们的案例中,我们是用户通过Web应用程序进行身份识别. 上面的图示说明了如下的一些概念 l Azure AD 是标识提供程序,负责对组织的目录中存在的用户和应用程序的标识进行验 ...
- TCP客户机-服务器
1 僵尸进程 2 信号处理 信号: 1 由一进程发往另一进程 2 由内核发往某进程 僵尸状态: 父进程取回子进程的相关信息,进程的ID,终止状态,子进程的资源利用信息 编程时: 1 当派生子进 ...
- Android ndk下用AssetManager读取assets的资源
转自:http://www.cppblog.com/johndragon/archive/2012/12/28/196754.html 在使用 cocos2dx 在 Android 上进行游戏开发时, ...