J2EE 使用pinyin4j实现汉字转换拼音
来源:互联网 发布:虚拟股华为知乎 编辑:程序博客网 时间:2024/04/28 09:58
由于项目需求,要求用户输入中文姓名自动转换成拼音,找到了pinyin4j学习了一下。
很多地方都又见到需要这个功能,所以在这里记录一下学习笔记。
这里也是按照我学习的顺序记录。可以理解成为倒叙,不知道这种方法好不好理解,
如果不太好理解我再正过来。
看了api发现PinyinHelper这个类里面的方法很适合我,所以只研究了一下这个。
研究了这个转换拼音的才发现原来拼音有好多种,而且是国际通用的,很神奇
里面的方法大概分为转换HanyuPinyin、YalePinyin、TongyongPinyin、WadeGilesPinyin
然后去差了一下区别,基本确定HanyuPinyin就是我们平时接触的拼音,也就是我需要的。
toHanyuPinyinStringArray(char ch)
toHanyuPinyinStringArray(char ch,HanyuPinyinOutputFormat outputFormat)
这两个方法应该就是我想要的。第一个很通俗易懂参数为字符于是试了一下。
String nameString = "和";char[] hanyu= nameString.trim().toCharArray();//将字符串String 转换成char[]for (char c : hanyu) {String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(c);for (String string : pinyin) {System.out.println(">"+string);}}
输出结果:
>he2
>he4
>huo2
>huo4
>huo5
>hai1
>he5
>hu2
很庆幸我用了个“和”做测试,意外发现多音字它会转换处所有发音。也解决了我当初实现这个功能的疑问----多音字怎么办?
后面数字是音调,但是如果每个字后面加数字有点不好看,我最初是直接把最后一位去掉,
然后去看了一下另一个方法中另一个不认识的参数HanyuPinyinOutputFormat,字面意思大概就是“汉语拼音输出格式”
发现里面有几个参数:
HanyuPinyinVCharType := WITH_U_AND_COLON
HanyuPinyinCaseType := LOWERCASE
HanyuPinyinToneType := WITH_TONE_NUMBER
从API文档的例子中看出。
HanyuPinyinVCharType就是把v转换成ü
HanyuPinyinCaseType区分大小写
HanyuPinyinToneType声调的类型
然后都分别有那些类型也说的很清楚。然后又使用了这个方法。
String nameString = "和";char[] hanyu= nameString.trim().toCharArray();HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);for (char c : hanyu) {String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);for (String string : pinyin) {System.out.println(">"+string);}}输出结果:
>he
>he
>huo
>huo
>huo
>hai
>he
>hu
基本达到要求,这么多音调我也用不着最后决定使用第一个(有更好的解决方案,请写到评论里,在这里先谢谢)
然后又加了些字符串的处理把首字母大写
private String toPinyin(String string){char[] hanyu= string.trim().toCharArray();HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();//使用小写outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);//去掉音调outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);StringBuffer fullPinyin = new StringBuffer("");try {for (char c : hanyu) {String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);//没有拼音的原样输出如:英文、数字、符号等if(pinyin == null){fullPinyin.append(c);continue;}//取每个发音第一个String eachWorld = pinyin[0];eachWorld = eachWorld.substring(0,1).toUpperCase()+eachWorld.substring(1);fullPinyin.append(eachWorld);}} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}return fullPinyin.toString();}
也许又更好的方案,欢迎评论大家一起讨论
参考文档:http://pinyin4j.sourceforge.net/pinyin4j-doc/
Zemo手打,转载请标明出处:http://blog.csdn.net/zemochen/article/details/21892609
- J2EE 使用pinyin4j实现汉字转换拼音
- 使用pinyin4j将汉字转换成拼音
- 汉字转换拼音(pinyin4j)
- 使用PinYin4j.jar将汉字转换为拼音使用实例
- pinyin4j实现汉字转拼音
- JAVA实现汉字转换为拼音 pinyin4j/JPinyin
- 使用PinYin4j.jar将汉字转换为拼音
- 使用PinYin4j.jar将汉字转换为拼音
- 使用PinYin4j.jar将汉字转换为拼音
- 使用PinYin4j.jar将汉字转换为拼音
- java使用PinYin4j将汉字转换为拼音
- 使用PinYin4j.jar将汉字转换为拼音
- 使用PinYin4j.jar将汉字转换为拼音
- 使用PinYin4j.jar将汉字转换为拼音
- 使用PinYin4j.jar将汉字转换为拼音
- 使用pinyin4j获取汉字的拼音和全角半角转换
- pinyin4j:拼音与汉字的转换实例
- pinyin4j汉字转换拼音的工具类
- 关于Linux线程的线程栈以及TLS
- GridView实现编辑、删除操作
- Json-RPC for java首次尝试
- s3c2440 存储控制器
- css的透明度设置兼容问题
- J2EE 使用pinyin4j实现汉字转换拼音
- JS调试工具:Venkman(JavaScript Debugger)
- 第四周-作业及实验
- UIEvent | UITouch | timestamp
- 让网站留住用户
- 公司员工的年龄排序
- Android中Context详解 ---- 你所不知道的Context
- 《APUE》chapter 5 Standard I/O libary 学习笔记(加上自己的代码)
- 去string左右空格