pinyin4j的用法

pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min (xmlerlimin@gmail.com)。以下是一些具体的介绍和使用方式。

1. pinyin4j的官方下载地址http://sourceforge.net/projects/pinyin4j/files/,目前最新的版本是2.5.0


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代码示例
代码:

[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));
}

}
运行结果:我是中国人! 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)完成修订,并编入其所撰写的汉英字典。

参考资料:
1. pinyin4j的官方资料
2. 汉语言的罗马化
http://icookies.spaces.live.com/blog/cns!2CC37E2F87FB3864!170.entry
3. Wiki: 威妥瑪拼音(维基百科)
http://wapedia.mobi/zh/威妥玛拼音
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Java中判断汉字音调的问题,我可以给您提供一些思路和参考。 首先,Java本身并没有提供直接判断汉字音调的方法,但是通过使用第三方库可以实现这个功能。其中,pinyin4j库是一个比较常用的选择,它可以将汉字转换成带音调的拼音字符串。 以下是一个使用pinyin4j库的示例代码,可以将一个汉字字符串转换成带音调的拼音字符串: ```java import net.sourceforge.pinyin4j.PinyinHelper; public class TestPinyin { public static void main(String[] args) { String hanzi = "你好世界"; StringBuilder pinyin = new StringBuilder(); for (int i = 0; i < hanzi.length(); i++) { String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(hanzi.charAt(i)); if (pinyinArray != null) { pinyin.append(pinyinArray[0]); } else { pinyin.append(hanzi.charAt(i)); } } System.out.println(pinyin.toString()); } } ``` 上述代码中,我们通过遍历汉字字符串的每个字符,调用PinyinHelper类的toHanyuPinyinStringArray方法将其转换成拼音字符串,并将结果拼接到StringBuilder对象中。如果该字符没有对应的拼音,则直接将其加入到结果中。 需要注意的是,pinyin4j库中的拼音字符串并不包含音调信息,而是使用数字代表不同的音调。例如,"nǐ hǎo shì jiè"中的音调分别为1、3、4、4,对应的拼音字符串为"ni3 hao3 shi4 jie4"。 如果您需要判断汉字字符串中的音调,可以在上述代码的基础上进行扩展。一种可行的思路是,通过判断每个拼音字符串中的数字来确定对应的音调。例如,以下代码可以统计汉字字符串中一共有几个一声、二声、三声和四声: ```java import net.sourceforge.pinyin4j.PinyinHelper; public class TestPinyin { public static void main(String[] args) { String hanzi = "你好世界"; StringBuilder pinyin = new StringBuilder(); int[] tones = new int[4]; // 存储四个音调的数量 for (int i = 0; i < hanzi.length(); i++) { String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(hanzi.charAt(i)); if (pinyinArray != null) { pinyin.append(pinyinArray[0]); for (int j = 0; j < pinyinArray[0].length(); j++) { char c = pinyinArray[0].charAt(j); if (c >= '1' && c <= '4') { int tone = c - '0' - 1; tones[tone]++; } } } else { pinyin.append(hanzi.charAt(i)); } } System.out.println(pinyin.toString()); System.out.println("一声:" + tones[0]); System.out.println("二声:" + tones[1]); System.out.println("三声:" + tones[2]); System.out.println("四声:" + tones[3]); } } ``` 上述代码中,我们首先定义了一个长度为4的整型数组tones,用于存储不同音调的数量。然后在遍历汉字字符串的每个字符时,将其转换成拼音字符串,并统计其中的音调数量。最后输出结果时,可以根据tones数组中的数量来判断不同音调的出现次数。 希望这些提示能够对您有所帮助。如果您有其他问题,可以继续问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值