您的位置:首页 > 其它

通过pinyin4j将汉字转换为全拼 和 拼音首字母

2014-08-06 17:28 323 查看
/**
* 汉字转换为拼音 包含多音字,包含生母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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: