java开源类库pinyin4j的使用

最近CMS系统为了增加查询的匹配率,需要增加拼音检索字段,在网上找到了pinyin4j的java开源类库,提供中文转汉语拼音(并且支持多音字),呵呵,看了看他的demo,决定就用它了,因为我在实际使用的时候,需要考虑多音字的不同排列组合,下面的代码就是支持多音字的.

pinyin4j官方网址:http://pinyin4j.sourceforge.net/

Java代码 收藏代码
  1. importjava.util.HashSet;
  2. importjava.util.Set;
  3. importnet.sourceforge.pinyin4j.PinyinHelper;
  4. importnet.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  5. importnet.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  6. importnet.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  7. importnet.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
  8. importnet.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  9. publicclasspinyin4j{
  10. /**
  11. *字符串集合转换字符串(逗号分隔)
  12. *@authorwyh
  13. *@paramstringSet
  14. *@return
  15. */
  16. publicstaticStringmakeStringByStringSet(Set<String>stringSet){
  17. StringBuilderstr=newStringBuilder();
  18. inti=0;
  19. for(Strings:stringSet){
  20. if(i==stringSet.size()-1){
  21. str.append(s);
  22. }else{
  23. str.append(s+",");
  24. }
  25. i++;
  26. }
  27. returnstr.toString().toLowerCase();
  28. }
  29. /**
  30. *获取拼音集合
  31. *@authorwyh
  32. *@paramsrc
  33. *@returnSet<String>
  34. */
  35. publicstaticSet<String>getPinyin(Stringsrc){
  36. if(src!=null&&!src.trim().equalsIgnoreCase("")){
  37. char[]srcChar;
  38. srcChar=src.toCharArray();
  39. //汉语拼音格式输出类
  40. HanyuPinyinOutputFormathanYuPinOutputFormat=newHanyuPinyinOutputFormat();
  41. //输出设置,大小写,音标方式等
  42. hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  43. hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE)
  44. hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
  45. String[][]temp=newString[src.length()][];
  46. for(inti=0;i<srcChar.length;i++){
  47. charc=srcChar[i];
  48. //是中文或者a-z或者A-Z转换拼音(我的需求,是保留中文或者a-z或者A-Z)
  49. if(String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")){
  50. try{
  51. temp[i]=PinyinHelper.toHanyuPinyinStringArray(srcChar[i],hanYuPinOutputFormat);
  52. }catch(BadHanyuPinyinOutputFormatCombinatione){
  53. e.printStackTrace();
  54. }
  55. }elseif(((int)c>=65&&(int)c<=90)||((int)c>=97&&(int)c<=122)){
  56. temp[i]=newString[]{String.valueOf(srcChar[i])};
  57. }else{
  58. temp[i]=newString[]{""};
  59. }
  60. }
  61. String[]pingyinArray=Exchange(temp);
  62. Set<String>pinyinSet=newHashSet<String>();
  63. for(inti=0;i<pingyinArray.length;i++){
  64. pinyinSet.add(pingyinArray[i]);
  65. }
  66. returnpinyinSet;
  67. }
  68. returnnull;
  69. }
  70. /**
  71. *递归
  72. *@authorwyh
  73. *@paramstrJaggedArray
  74. *@return
  75. */
  76. publicstaticString[]Exchange(String[][]strJaggedArray){
  77. String[][]temp=DoExchange(strJaggedArray);
  78. returntemp[0];
  79. }
  80. /**
  81. *递归
  82. *@authorwyh
  83. *@paramstrJaggedArray
  84. *@return
  85. */
  86. privatestaticString[][]DoExchange(String[][]strJaggedArray){
  87. intlen=strJaggedArray.length;
  88. if(len>=2){
  89. intlen1=strJaggedArray[0].length;
  90. intlen2=strJaggedArray[1].length;
  91. intnewlen=len1*len2;
  92. String[]temp=newString[newlen];
  93. intIndex=0;
  94. for(inti=0;i<len1;i++){
  95. for(intj=0;j<len2;j++){
  96. temp[Index]=strJaggedArray[0][i]+strJaggedArray[1][j];
  97. Index++;
  98. }
  99. }
  100. String[][]newArray=newString[len-1][];
  101. for(inti=2;i<len;i++){
  102. newArray[i-1]=strJaggedArray[i];
  103. }
  104. newArray[0]=temp;
  105. returnDoExchange(newArray);
  106. }else{
  107. returnstrJaggedArray;
  108. }
  109. }
  110. /**
  111. *@paramargs
  112. */
  113. publicstaticvoidmain(String[]args){
  114. Stringstr="单田芳";
  115. System.out.println(makeStringByStringSet(getPinyin(str)));
  116. }
  117. }

控制台输出:dantianfang,shantianfang,chantianfang
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值