pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,做者是Li Min (xmlerlimin@gmail.com )。如下是一些具体的介绍和使用方式。java
pinyin4j的官方下载地址http://sourceforge.net/projects/pinyin4j/files/,目前最新的版本是2.5.0api
下载解压后的目录结构及说明以下app
(1) doc : pinyin4j的api文档测试
(2) lib : pinyin4j的jar包spa
(3) src : pinyin4j的源代码.net
(4) CHANGELOG.txt : pinyin4j的版本更新日志命令行
(5) COPYING.txt : LICENSE说明日志
(6) README.txt : pinyin4j的概要介绍code
运行GUI demoorm
命令行执行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。
字符串转化成拼音Java代码示例
[java:nogutter] view plaincopyprint?
package testcase; 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 { public static String getPinYin(String inputString) { HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.LOWERCASE); format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK); format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE); char[] input = inputString.trim().toCharArray(); StringBuffer output = new StringBuffer(""); try { for (int i = 0; i < input.length; i++) { if (Character.toString(input[i]).matches("[//u4E00-//u9FA5]+")) { String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format); output.append(temp[0]); output.append(" "); } else output.append(Character.toString(input[i])); } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return output.toString(); } public static void main(String[] args) { String chs = "我是中国人! I'm Chinese!"; System.out.println(chs); System.out.println(getPinYin(chs)); } }