首页 > 代码库 > Java汉字转拼音库,Pinyin4j
Java汉字转拼音库,Pinyin4j
pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min (xmlerlimin@gmail.com)。以下是一些具体的介绍和使用方式。
1.pinyin4j的官方下载地址http://sourceforge.net/projects/pinyin4j/files/
2.下载解压后的目录结构及说明如下
(1) doc : pinyin4j的api文档
(2) lib : pinyin4j的jar包
(3) src : pinyin4j的源代码
(4) CHANGELOG.txt: pinyin4j的版本更新日志
(5) COPYING.txt: LICENSE说明
(6) README.txt : pinyin4j的概要介绍
3.运行GUI demo命令行执行cd ${pinyin-install-dir}/lib,进入到pinyin4j-2.5.0.jar所在的目录,敲入java -jar pinyin4j-2.5.0.jar执行,GUI界面如下:
上图是输入汉字“中”,执行Convert to Pinyin后的截图。Format后有三个下拉框,第一个下拉框有三个选项,用来控制生成的拼音声调的显示方式,三个方式及其效果如下(以汉字“中”,选中Formatted hanyu Pinyin选项卡测试):
WITH_TONE_NUMBER(以数字代替声调) : zhong1 zhong4
WITHOUT_TONE(无声调) : zhong zhong
WITH_TONE_MARK (有声调) : zhōng zhòng
第二个下拉框是碰到unicode的ü、v和 u时的显示方式,共有三个方式,以下是以声调为WITH_TONE_NUMBER方式显示汉字“吕”示例:
WITH_U_AND_COLON : lu:3
WITH_V: lv3
WITH_U_UNICODE : lü3
第三个下拉框是控制生成的拼音是以大写方式显示还是以小写方式显示,以汉字“国”示例如下:
LOWERCASE:guó
UPPERCASE:GUÓ
上图的汉字转化成拼音后,有六种显示方式,这是因为pinyin4j支持将汉字转化成六种拼音表示法。其对应关系是:汉语拼音-Hanyu Pinyin,通用拼音-Tongyong Pinyin,威妥玛拼音(威玛拼法)-Wade-Giles Pinyin, 注音符号第二式-MPSII Pinyin,耶鲁拼法-Yale Pinyin和国语罗马字-Gwoyeu Romatzyh。
4.字符串转化成拼音Java代码示例代码:
- import net.sourceforge.pinyin4j.PinyinHelper;
- import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
- import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
- import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
- import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
- import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
- public class PinYinUtil {
- /**
- * 将字符串中的中文转化为拼音,其他字符不变
- *
- * @param inputString
- * @return
- */
- public static String getPingYin(String inputString) {
- HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
- format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
- format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
- format.setVCharType(HanyuPinyinVCharType.WITH_V);
- char[] input = inputString.trim().toCharArray();
- String output = "";
- try {
- for (int i = 0; i < input.length; i++) {
- if (java.lang.Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {
- String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);
- output += temp[0];
- } else
- output += java.lang.Character.toString(input[i]);
- }
- } catch (BadHanyuPinyinOutputFormatCombination e) {
- e.printStackTrace();
- }
- return output;
- }
- /**
- * 获取汉字串拼音首字母,英文字符不变
- * @param chinese 汉字串
- * @return 汉语拼音首字母
- */
- public static String getFirstSpell(String chinese) {
- StringBuffer pybf = new StringBuffer();
- char[] arr = chinese.toCharArray();
- HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
- defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
- defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
- for (int i = 0; i < arr.length; i++) {
- if (arr[i] > 128) {
- try {
- String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
- if (temp != null) {
- pybf.append(temp[0].charAt(0));
- }
- } catch (BadHanyuPinyinOutputFormatCombination e) {
- e.printStackTrace();
- }
- } else {
- pybf.append(arr[i]);
- }
- }
- return pybf.toString().replaceAll("\\W", "").trim();
- }
- public static void main(String[] args) {
- String chs = "我是中国人! I‘m Chinese!";
- System.out.println(chs);
- System.out.println(getPinYin(chs));
- }
- }
运行结果:我是中国人! I‘m Chinese!
w? shì zhōng guó rén ! I‘m Chinese!
附件:
1.各种拼音说明
Yale Pinyin是在第二次世界大战期间由美国军方发明的编码系统,主要为了让在中国地区作战的美军士兵能够快速地熟悉汉语发音,能够向当地人请求帮助,可以说这是一个速成教材,它的目的甚至不是用来互相交流而是使士兵在发音时不会被中国人听错就可以了。
Gwoyeu Romatzyh:即国语罗马字,它是由林语堂提议建立的,在1928年由国民政府大学堂颁布推行。在中国的台湾省这一编码体系得到了保留,但是它就像 Yale一样现在几乎很少有人使用,在1986年,国语罗马字被国语注音符号第二式(MPSII)所取代,在2002年,又被通用拼音(Tongyong Pinyin)取代,成为台湾今天正式的官方汉语音译编码体系。
威妥玛拼音,习惯称作威妥玛拼法或威玛式拼音、韦氏拼音、威翟式拼音,是一套用于拼写中文普通话的罗马拼音系统。19世纪中叶由英国人威妥玛(Thomas Francis Wade)发明,后由翟理斯(Herbert Allen Giles)完成修订,并编入其所撰写的汉英字典。
参考资料:
- pinyin4j的官方资料
- 汉语言的罗马化
http://icookies.spaces.live.com/blog/cns!2CC37E2F87FB3864!170.entry
- Wiki:威妥瑪拼音(维基百科)
http://wapedia.mobi/zh/%E5%A8%81%E5%A6%A5%E7%8E%9B%E6%8B%BC%E9%9F%B3
来自:http://blog.csdn.net/hfhwfw/article/details/6030816