通过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> /// 编 码 人:苏飞 /// 联 ...
随机推荐
- 由于SSH配置文件的不匹配,导致的Permission denied (publickey)及其解决方法。
读者如要转载,请标明出处和作者名,谢谢.地址01:http://space.itpub.net/25851087地址02:http://www.cnblogs.com/zjrodger/作者名:zjr ...
- Codeforces Round #368 (Div. 2) B. Bakery (模拟)
Bakery 题目链接: http://codeforces.com/contest/707/problem/B Description Masha wants to open her own bak ...
- Struts ForwardAction Example
In Struts MVC model, you have to go thought the Action Controller to get a new view page. In some ca ...
- 购买咏南中间件送客户端C/S和B/S开发框架
购买咏南DATASNAP中间件送CS插件开发框架和BS开发框架,CS.BS开发框架共享同一个中间件.价格从优! 中间件可供DELPHI6~DELPHI XE8开发的客户端调用! CS开发框架截图: B ...
- 使用python通过SSH登陆linux并操作
用的昨天刚接触到的库,在windows下通过paramiko来登录linux系统并执行了几个命令,基本算是初试成功,后面会接着学习的. 代码: >>> import paramiko ...
- Oracle数据库编程:在JDBC中应用Oracle
9.在JDBC中应用Oracle: JDBC访问数据库基本步骤: 1.加载驱动 2.获取链接对象 3.创建SQL语句 4.提交S ...
- socket的异步回调函数,采用一问一答
socket.Send(buf); AsyncCallback callback = new AsyncCallback(ReceiveData5); mysocket.BeginReceive(Wi ...
- mysql中 group_concat长度限制
//这个函数有长度限制,上了多次当.默认长度1024长度. select group_concat(id) from table; 要彻底修改,在MySQL配置文件(my.ini)中加上 group_ ...
- android 小知识点
小知识点总结 1. android中MotionEvent.ACTION_CANCEL事件如何被触发? 对于这个问题,android文档的说明很简短,想看明白很难.国外一网页说的还比较详细,写在这里分 ...
- Slave延迟很大的优化方法总结(MySQL优化)
[http://www.cstor.cn/textdetail_9146.html] 一般而言,slave相对master延迟较大,其根本原因就是slave上的复制线程没办法真正做到并发.简单说,在m ...