1 .简要介绍
在某些情况下,可能需要将汉字编程为相应的拼音,以便于数据的处理。 例如在安卓智能手机APP的开发中,要查联系人的名字,通常用拼音查。 例如,要查找“zgdsb”,请输入“cmd”,即“zgdsb”三个汉字拼音“caomengde”的每个字符的首字母。 但是,怎样才能把“zgdsb”翻译成“caomengde”? 简单的方法是制作一个大的对照表。 “比如用相关容器映射”,比如“苹果月亮、“cao”、“pydhb、“meng”、“德国”、“de”…但这种方式需要维护相对较大的对照表也就是说,用Map这样的容器是不行的。c可以用STL中的multimap解决这个问题,但Java中没有multimap这样的东西。 除非自己实现一个。
拼音4j就是为了解决这样的问题。 这是sourceforge.net的开源项目,功能非常强大。
同一个汉字支持多个发音
也支持拼音的格式输出。 例如,第几次之类,
还支持简体中文、繁体中文转换为拼音…使用方便。 以下是官方网站,可以下载。
http://pinyin4j.sourceforge.net/
2 .基本用法:
通常,只需使用其中的PinyinHelper类的静态方法toHanyuPinyinStringArray即可。 例如,以下内容:
string [ ] pinyin array=pinyin helper.tohanyupinyinstringarray ('单');
for(intI=0; i pinyinArray.length; I )
{
system.out.println (pinyin array [ I ] );
}
输出:
dan1
chan2
shan4
这三个发音,后面的数字表示第几个声音。 可以看到,静态方法toHanyuPinyinStringArray返回的数据类型是接收多个汉字发音的字符串数组。 如果toHanyuPinyinStringArray的参数不是汉字,则返回null。
3 .格式支持
拼音4j支持拼音输出的格式。 例如,“黄”可以输出“黄”、“黄2”、“虎ng”等。 以下代码似乎是输出“hung”的示例。
hanyupinyinoutputformatformat=newhanyupinyinoutputformat (;
format.settonetype (hanyupinyintonetype.with _ tone _ mark );
format.setvchartype (hanyupinyinvchartype.with _ u _ unicode );
String[] pinyinArray=null;
托里
{
pinyin array=pinyin helper.tohanyupinyinstringarray ('黄',format );
}
缓存(badhanyupinyinoutputformatcombinatione ) )。
{
e .打印任务跟踪(;
}
for(intI=0; i pinyinArray.length; I )
{
system.out.println (pinyin array [ I ] );
}
还支持大小写转换、等。 有关详细信息,请参阅拼音4j附带的文档。
4 .实际示例代码
如果尝试将某个字符中的所有汉字转换为无音调拼音输出,则该字符可能包含阿拉伯数字、英语、标点符号等。 如果完全自己写代码进行转换,那就非常麻烦了。 其中一个必须首先加以区分。 在这个文字中它们是汉字,它们是非汉字。 如果有拼音4j的话,拼音4j会自动输出空值,所以这个问题并不难。 请参见以下代码示例。
import net.source forge.pinyin 4j.*;
import net.source forge.pinyin 4j.format.hanyupinyinoutputformat;
import net.source forge.pinyin 4j.format.hanyupinyintonetype;
import net.SourceForge.pinyin 4j.format.exception.badhanyupinyinoutputformatcombination;
公共类Chinese2py
{
publicstaticvoidmain (string [ ] args ) )。
{
Hanyu hanyu=new Hanyu ();
//中英文夹杂的文本
String str='荆溪白石出,Hello天寒红叶稀少。 安卓山路元无雨,What's up? 翠湿人服。 ';
stringstrpinyin=hanyu.getstring pinyin (str;
system.out.println(strpinyin;
}
}
类汉峪
{
privatehanyupinyinoutputformatformat=null;
私有字符串[ ]拼音;
public Hanyu () )
{
format=newhanyupinyinoutputformat (;
format.settonetype (hanyupinyintonetype.without _ tone );
拼音=空;
}
转换//1字符
公共字符串字符识别(charc ) )。
{
托里
{
pinyin=pinyin helper.tohanyupinyinstringarray (c,format );
}
缓存(badhanyupinyinoutputformatcombinatione ) )。
{
e .打印任务跟踪(;
}
如果//c不是汉字,则toHanyuPinyinStringArray返回null
if(pinyin==null )返回null;
//只取一个发音,多音字时只取最初的发音
return pinyin[0];
}
//转换字符串
公共字符串图形(字符串) )。
{
stringbuilder sb=new stringbuilder (;
String tempPinyin=null;
for(intI=0; i str.length (; I )
{
temp pinyin=getcharacterpinyin (str.charat (I ) );
时间拼音==空(if ) ) )。
{
//str.Charat(I )如果不是汉字就直接
sb.append(str.Charat ) I );
}
else
{
sb.append(temppinyin );
}
}
return sb.toString (;
}
}
输出结果:
荆希百世,赫鲁希希。 Android shanluyuanwuyu,What'sup? 康嘉祥。