zoukankan      html  css  js  c++  java
  • java将汉语转换为拼音工具类

    内容转载自:https://blog.csdn.net/u012965373/article/details/82625950?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase


    添加依赖:

    <!-- 汉字转为拼音 -->
    <dependency>
        <groupId>com.belerweb</groupId>
        <artifactId>pinyin4j</artifactId>
        <version>2.5.0</version>
    </dependency>
    

     工具类实现:

      1 import org.apache.logging.log4j.LogManager;
      2 import org.apache.logging.log4j.Logger;
      3 
      4 import net.sourceforge.pinyin4j.PinyinHelper;
      5 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
      6 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
      7 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
      8 import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
      9 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
     10 
     11 /**
     12  * 汉字与拼音转换工具
     13  * @author Jinyy
     14  *
     15  */
     16 public class HanyuPinyinUtil {
     17     
     18     private static final Logger LOG = LogManager.getLogger(HanyuPinyinUtil.class);
     19 
     20     /**
     21      * 将文字转为汉语拼音
     22      * @param ChineseLanguage 要转成拼音的中文
     23      * @return 拼音小写
     24      */
     25     public String toHanyuPinyin(String ChineseLanguage){
     26         return toPinyinSplitWithSpecialSymbol(ChineseLanguage, "");
     27     }
     28     
     29     /**
     30      * 将汉语处理为拼音,并通过指定符号分隔
     31      * @param ChineseLanguage
     32      * @param symbol
     33      * @return
     34      */
     35     public String toPinyinSplitWithSpecialSymbol(String ChineseLanguage, String symbol){
     36         // 将汉字拆分为字符数组,通过逗号分隔
     37         char[] cl_chars = ChineseLanguage.trim().toCharArray();
     38         String hanyupinyin = "";
     39         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
     40         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 输出拼音全部小写
     41         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不带声调
     42         defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V) ;
     43         try {
     44             for (int i=0; i<cl_chars.length; i++){
     45                 if (String.valueOf(cl_chars[i]).matches("[u4e00-u9fa5]+")){// 如果字符是中文,则将中文转为汉语拼音
     46                     hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0] + symbol;
     47                 } else {// 如果字符不是中文,则不转换
     48                     hanyupinyin += cl_chars[i];
     49                 }
     50             }
     51         } catch (BadHanyuPinyinOutputFormatCombination e) {
     52             LOG.info("字符不能转成汉语拼音");
     53         }
     54         return hanyupinyin.substring(0, hanyupinyin.length()-1);
     55     }
     56  
     57     /**
     58      * 转换拼音字符串中第一个为大写
     59      * @param ChineseLanguage
     60      * @return
     61      */
     62     public String getFirstLettersUp(String ChineseLanguage){
     63         return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.UPPERCASE);
     64     }
     65  
     66     /**
     67      * 转换拼音字符串第一个为小写
     68      * @param ChineseLanguage
     69      * @return
     70      */
     71     public String getFirstLettersLo(String ChineseLanguage){
     72         return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.LOWERCASE);
     73     }
     74  
     75     /**
     76      * 获取第一个位置
     77      * @param ChineseLanguage
     78      * @param caseType
     79      * @return
     80      */
     81     public String getFirstLetters(String ChineseLanguage,HanyuPinyinCaseType caseType) {
     82         char[] cl_chars = ChineseLanguage.trim().toCharArray();
     83         String hanyupinyin = "";
     84         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
     85         defaultFormat.setCaseType(caseType);// 输出拼音全部大写
     86         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
     87         try {
     88             for (int i = 0; i < cl_chars.length; i++) {
     89                 String str = String.valueOf(cl_chars[i]);
     90                 if (str.matches("[u4e00-u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
     91                     hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0].substring(0, 1);
     92                 } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
     93                     hanyupinyin += cl_chars[i];
     94                 } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
     95                     hanyupinyin += cl_chars[i];
     96                 } else {// 否则不转换
     97                     hanyupinyin += cl_chars[i];//如果是标点符号的话,带着
     98                 }
     99             }
    100         } catch (BadHanyuPinyinOutputFormatCombination e) {
    101             LOG.error("字符不能转成汉语拼音");
    102         }
    103         return hanyupinyin;
    104     }
    105  
    106     /**
    107      * 获取拼音字符串
    108      * @param ChineseLanguage
    109      * @return
    110      */
    111     public String getPinyinString(String ChineseLanguage){
    112         char[] cl_chars = ChineseLanguage.trim().toCharArray();
    113         String hanyupinyin = "";
    114         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    115         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出拼音全部大写
    116         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
    117         try {
    118             for (int i = 0; i < cl_chars.length; i++) {
    119                 String str = String.valueOf(cl_chars[i]);
    120                 if (str.matches("[u4e00-u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
    121                     hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(
    122                             cl_chars[i], defaultFormat)[0];
    123                 } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
    124                     hanyupinyin += cl_chars[i];
    125                 } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
    126  
    127                     hanyupinyin += cl_chars[i];
    128                 } else {// 否则不转换
    129                 }
    130             }
    131         } catch (BadHanyuPinyinOutputFormatCombination e) {
    132             LOG.error("字符不能转成汉语拼音");
    133         }
    134         return hanyupinyin;
    135     }
    136     /**
    137      * 取第一个汉字的第一个字符
    138      * @Title: getFirstLetter
    139      * @return String
    140      * @throws
    141      */
    142     public String getFirstLetter(String ChineseLanguage){
    143         char[] cl_chars = ChineseLanguage.trim().toCharArray();
    144         String hanyupinyin = "";
    145         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    146         defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 输出拼音全部大写
    147         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
    148         try {
    149             String str = String.valueOf(cl_chars[0]);
    150             if (str.matches("[u4e00-u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
    151                 hanyupinyin = PinyinHelper.toHanyuPinyinStringArray(
    152                         cl_chars[0], defaultFormat)[0].substring(0, 1);;
    153             } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
    154                 hanyupinyin += cl_chars[0];
    155             } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
    156  
    157                 hanyupinyin += cl_chars[0];
    158             } else {// 否则不转换
    159  
    160             }
    161         } catch (BadHanyuPinyinOutputFormatCombination e) {
    162             LOG.error("字符不能转成汉语拼音");
    163         }
    164         return hanyupinyin;
    165     }
    166  
    167     /**
    168      * 测试程序入口
    169      * @param args
    170      */
    171     public static void main(String[] args) {
    172         HanyuPinyinUtil hanyuPinyinUtil = new HanyuPinyinUtil();
    173         System.out.println(hanyuPinyinUtil.toHanyuPinyin("测试汉语字符串"));
    174         
    175         System.out.println(hanyuPinyinUtil.toPinyinSplitWithSpecialSymbol("测试汉语字符串", ";"));
    176     }
    177 }
    View Code

    输出结果:

    ceshihanyuzifuchua
    ce;shi;han;yu;zi;fu;chuan
  • 相关阅读:
    fullCalendar改造计划之带农历节气节假日的万年历(转)
    Linked List Cycle
    Remove Nth Node From End of List
    Binary Tree Inorder Traversal
    Unique Binary Search Trees
    Binary Tree Level Order Traversal
    Binary Tree Level Order Traversal II
    Plus One
    Remove Duplicates from Sorted List
    Merge Two Sorted Lists
  • 原文地址:https://www.cnblogs.com/waiting-ying/p/12918175.html
Copyright © 2011-2022 走看看