/**
* 汉字转换为拼音 包含多音字,包含生母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将汉字转换为全拼 和 拼音首字母的更多相关文章

  1. JAVA将汉字转换为全拼以及返回中文的首字母,将字符串转移为ASCII码

    import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseT ...

  2. 【Java】使用pinyin4j获取汉字的全拼或首字母

    汉字转拼音的工具类,常用于做汉字拼音的模糊查询. https://www.cnblogs.com/htyj/p/7891918.html

  3. C# 获取汉字的拼音首字母和全拼(含源码)

    C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手 ...

  4. oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)

        oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)   效果如下: Oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下   Sql代码   --oracle汉字转拼 ...

  5. C# 获取汉字拼音首字母/全拼

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...

  6. vue 获取汉字的全拼、简拼、首拼

    1.封装公共方法,获取汉字的全拼.简拼.首拼 export const Pinyin = { _JMcode:{ "-":"", "—":& ...

  7. c#汉字转拼音首字母全拼支持多音字

    1.首先在NuGet安装pingyinConverter 2.下载-安装-引用ChineseChar.dll到项目中 官网了解:http://www.microsoft.com/zh-cn/downl ...

  8. js汉语转拼音(全拼、首字母、拼音首字母)

    新建js文件first_alphabet.js // JavaScript Document // 汉字拼音首字母列表 本列表包含了20902个汉字,用于配合 ToChineseSpell //函数使 ...

  9. C#将汉字转换成全拼的拼音EcanConvertToCh帮助类 (转)

    点击下载 EcanConvertToCh.rar 主要功能就是将汉字转换成全拼的拼音,只要你输入一个汉字就会相应的转成拼音 /// <summary> /// 编 码 人:苏飞 /// 联 ...

随机推荐

  1. HDU1963Investment(DP)

    简单DP,题解见代码

  2. VS2010 用WebBrowser控件 无响应

    问题:偶尔我遇到这个问题,不知怎么的,拖放这个web控件它就卡死,无法响应,其他应用程序没有影响,任务管理器显示无法响应. 解决:原来是有道翻译的问题,具体为什么不清楚,只要一打开有道翻译,用web控 ...

  3. 解决ie6不支持position: fixed;导致无法滚动的办法

    <div id="im" style="top: 100px; position: fixed; left: 5px; border: 3px solid #006 ...

  4. 命令行解析getopt_long

    getopt_long函数可以轻松的解析main函数的命令行参数. int getopt_long(int argc,char * const argv[],const char *optstring ...

  5. 将序列设置为字段的默认值 - oracle

    1.表结构中log_id 非空.且为主键字段 create table TL_M_QRTZ_LOG( log_id NUMBER(8) not null, job_id NUMBER(8) not n ...

  6. AUPE学习第八章------进程控制

    每个进程都有一个非负整形表示的唯一进程ID. init进程是一号进程,是第一个用户态的进程.它负责内核启动以后启动一个unix系统, 它读取的配置文件一般在/etc/rc*./etc/inittab. ...

  7. OC: NSString、NSArray、NSNumber

    数组参考: 参考1  参考2  参考3 //字符串 //1.获取字符串的长度: //表情符号最少占两个字节 NSString * s = @"中文字符串

  8. Android vector标签 PathData 画图超详解

    SVG是一种矢量图格式,是Scalable Vector Graphics三个单词的首字母缩写.在xml文件中的标签是<vector>,画出的图形可以像一般的图片资源使用,例子如下: &l ...

  9. SQL Server 批量插入数据的两种方法(转)

    此文原创自CSDN TJVictor专栏:http://blog.csdn.net/tjvictor/archive/2009/07/18/4360030.aspx 在SQL Server 中插入一条 ...

  10. 【转】解决Fragment already active方法

    http://blog.csdn.net/u011730649/article/details/43227721 今天在项目中使用Fragment的时候出现这样的错误: 01-28 10:53:34. ...