Java之——汉字转换拼音(大小写)

pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,其maven地址为:http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2.5.0
pinyin4J 提供PinyinHelper这个静态类对外提供拼音转换的服务,主要有一下方法:

static public String[] toHanyuPinyinStringArray(char ch)
将char(必须为汉字单字)转化为拼音,实用的是通用的格式,如果ch为非汉字,返回null。
输入:重 输出:[zhong4, chong2]
说明重字有两个读音,拼音后面的1,2,3,4 代表的是读音
static public String[] toHanyuPinyinStringArray(char ch,HanyuPinyinOutputFormat outputFormat)
同上,但是这个方法可以设置输出的格式。HanyuPinyinOutputFormat   可以设置拼音大小写、是否后面加读音数字、特殊读音的显示方式,定义如下:
  1. /**
  2. * The option indicates that the output of 'ü' is "u:"
  3. */
  4. public static final HanyuPinyinVCharType WITH_U_AND_COLON = new HanyuPinyinVCharType( "WITH_U_AND_COLON");
  5. /**
  6. * The option indicates that the output of 'ü' is "v"
  7. */
  8. public static final HanyuPinyinVCharType WITH_V = new HanyuPinyinVCharType( "WITH_V")
  9. /**
  10. * The option indicates that the output of 'ü' is "ü" in Unicode form
  11. */
  12. public static final HanyuPinyinVCharType WITH_U_UNICODE = new HanyuPinyinVCharType( "WITH_U_UNICODE");
  1. static public String[] toTongyongPinyinStringArray( char ch) //转换为通用拼音
  2. static public String[] toWadeGilesPinyinStringArray( char ch) //转换为威妥玛拼音
  3. static public String[] toMPS2PinyinStringArray( char ch) //转换为注音符号拼音
  4. static public String[] toYalePinyinStringArray( char ch) //转换为耶魯拼音
  5. static public String[] toGwoyeuRomatzyhStringArray( char ch) //转换为国语罗马字
对于”重“的拼音转换,以上方法分别得到的结果是:
  1. 汉语拼音: [zhong4, chong2]
  2. 通用拼音: [jhong4, chong2]
  3. 威妥玛拼音: [chung4, ch`ung2]
  4. 注音符号拼音: [jung4, chung2]
  5. 耶魯拼音: [jung4, chung2]
  6. 国语罗马字: [jonq, chorng]
好了,有了上面的基础,我们可以封装一个工具类,用来将汉字转换成拼音,这里只使用了汉字拼音。
首先要将pinyin4j加入项目中,如果是maven项目,可以添加引用:
  1. <dependency>
  2. <groupId>com.belerweb </groupId>
  3. <artifactId>pinyin4j </artifactId>
  4. <version>2.5.0 </version>
  5. </dependency>
非maven的可以直接将下载好的jar包放入classpath。
然后编写工具类 PinyinTool.java:
  1. package com.lyz.pingyin;
  2. import net.sourceforge.pinyin4j.PinyinHelper;
  3. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  4. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  5. import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  6. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  7. /**
  8. * 汉字转化为拼音的工具类
  9. * @author liuyazhuang
  10. *
  11. */
  12. public class PinyinTool {
  13. HanyuPinyinOutputFormat format = null;
  14. public static enum Type {
  15. UPPERCASE, //全部大写
  16. LOWERCASE, //全部小写
  17. FIRSTUPPER //首字母大写
  18. }
  19. public PinyinTool(){
  20. format = new HanyuPinyinOutputFormat();
  21. format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
  22. format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  23. }
  24. public String toPinYin(String str) throws BadHanyuPinyinOutputFormatCombination{
  25. return toPinYin(str, "", Type.UPPERCASE);
  26. }
  27. public String toPinYin(String str,String spera) throws BadHanyuPinyinOutputFormatCombination{
  28. return toPinYin(str, spera, Type.UPPERCASE);
  29. }
  30. /**
  31. * 将str转换成拼音,如果不是汉字或者没有对应的拼音,则不作转换
  32. * 如: 明天 转换成 MINGTIAN
  33. * @param str:要转化的汉字
  34. * @param spera:转化结果的分割符
  35. * @return
  36. * @throws BadHanyuPinyinOutputFormatCombination
  37. */
  38. public String toPinYin(String str, String spera, Type type) throws BadHanyuPinyinOutputFormatCombination {
  39. if(str == null || str.trim().length()== 0)
  40. return "";
  41. if(type == Type.UPPERCASE)
  42. format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
  43. else
  44. format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  45. String py = "";
  46. String temp = "";
  47. String[] t;
  48. for( int i= 0;i<str.length();i++){
  49. char c = str.charAt(i);
  50. if(( int)c <= 128)
  51. py += c;
  52. else{
  53. t = PinyinHelper.toHanyuPinyinStringArray(c, format);
  54. if(t == null)
  55. py += c;
  56. else{
  57. temp = t[ 0];
  58. if(type == Type.FIRSTUPPER)
  59. temp = t[ 0].toUpperCase().charAt( 0)+temp.substring( 1);
  60. py += temp+(i==str.length()- 1? "":spera);
  61. }
  62. }
  63. }
  64. return py.trim();
  65. }
  66. }
编写测试类PingyinToolTest

  1. package com.lyz.pingyin.test;
  2. import com.lyz.pingyin.PinyinTool;
  3. import com.lyz.pingyin.PinyinTool.Type;
  4. /**
  5. * 测试拼音转化结果
  6. * @author liuyazhuang
  7. *
  8. */
  9. public class PingyinToolTest {
  10. public static void main(String[] args) throws Exception{
  11. PinyinTool tool = new PinyinTool();
  12. System.out.println( "刘亚壮的运行测试结果为====" + tool.toPinYin( "刘亚壮", "", Type.LOWERCASE));
  13. }
  14. }

运行测试结果如下:
刘亚壮的运行测试结果为====liuyazhuang

猜你喜欢

转载自blog.csdn.net/qq_32253371/article/details/80985746
今日推荐