zoukankan      html  css  js  c++  java
  • PinYin4JUtils

      1 import java.util.Arrays;
      2 
      3 import net.sourceforge.pinyin4j.PinyinHelper;
      4 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
      5 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
      6 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
      7 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
      8 
      9 public class PinYin4jUtils {
     10     /**
     11      * 将字符串转换成拼音数组
     12      * 
     13      * @param src
     14      * @return
     15      */
     16     public static String[] stringToPinyin(String src) {
     17         return stringToPinyin(src, false, null);
     18     }
     19 
     20     /**
     21      * 将字符串转换成拼音数组
     22      * 
     23      * @param src
     24      * @return
     25      */
     26     public static String[] stringToPinyin(String src, String separator) {
     27 
     28         return stringToPinyin(src, true, separator);
     29     }
     30 
     31     /**
     32      * 将字符串转换成拼音数组
     33      * 
     34      * @param src
     35      * @param isPolyphone
     36      *            是否查出多音字的所有拼音
     37      * @param separator
     38      *            多音字拼音之间的分隔符
     39      * @return
     40      */
     41     public static String[] stringToPinyin(String src, boolean isPolyphone,
     42             String separator) {
     43         // 判断字符串是否为空
     44         if ("".equals(src) || null == src) {
     45             return null;
     46         }
     47         char[] srcChar = src.toCharArray();
     48         int srcCount = srcChar.length;
     49         String[] srcStr = new String[srcCount];
     50 
     51         for (int i = 0; i < srcCount; i++) {
     52             srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);
     53         }
     54         return srcStr;
     55     }
     56 
     57     /**
     58      * 将单个字符转换成拼音
     59      * 
     60      * @param src
     61      * @return
     62      */
     63     public static String charToPinyin(char src, boolean isPolyphone,
     64             String separator) {
     65         // 创建汉语拼音处理类
     66         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
     67         // 输出设置,大小写,音标方式
     68         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
     69         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
     70 
     71         StringBuffer tempPinying = new StringBuffer();
     72 
     73         // 如果是中文
     74         if (src > 128) {
     75             try {
     76                 // 转换得出结果
     77                 String[] strs = PinyinHelper.toHanyuPinyinStringArray(src,
     78                         defaultFormat);
     79 
     80                 // 是否查出多音字,默认是查出多音字的第一个字符
     81                 if (isPolyphone && null != separator) {
     82                     for (int i = 0; i < strs.length; i++) {
     83                         tempPinying.append(strs[i]);
     84                         if (strs.length != (i + 1)) {
     85                             // 多音字之间用特殊符号间隔起来
     86                             tempPinying.append(separator);
     87                         }
     88                     }
     89                 } else {
     90                     tempPinying.append(strs[0]);
     91                 }
     92 
     93             } catch (BadHanyuPinyinOutputFormatCombination e) {
     94                 e.printStackTrace();
     95             }
     96         } else {
     97             tempPinying.append(src);
     98         }
     99 
    100         return tempPinying.toString();
    101 
    102     }
    103 
    104     public static String hanziToPinyin(String hanzi) {
    105         return hanziToPinyin(hanzi, " ");
    106     }
    107 
    108     /**
    109      * 将汉字转换成拼音
    110      * 
    111      * @param hanzi
    112      * @param separator
    113      * @return
    114      */
    115     public static String hanziToPinyin(String hanzi, String separator) {
    116 
    117         // 创建汉语拼音处理类
    118         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    119         // 输出设置,大小写,音标方式
    120         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    121         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    122 
    123         String pinyingStr = "";
    124         try {
    125             pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat,
    126                     separator);
    127         } catch (BadHanyuPinyinOutputFormatCombination e) {
    128             // TODO Auto-generated catch block
    129             e.printStackTrace();
    130         }
    131         return pinyingStr;
    132     }
    133 
    134     /**
    135      * 将字符串数组转换成字符串
    136      * 
    137      * @param str
    138      * @param separator
    139      *            各个字符串之间的分隔符
    140      * @return
    141      */
    142     public static String stringArrayToString(String[] str, String separator) {
    143         StringBuffer sb = new StringBuffer();
    144         for (int i = 0; i < str.length; i++) {
    145             sb.append(str[i]);
    146             if (str.length != (i + 1)) {
    147                 sb.append(separator);
    148             }
    149         }
    150         return sb.toString();
    151     }
    152 
    153     /**
    154      * 简单的将各个字符数组之间连接起来
    155      * 
    156      * @param str
    157      * @return
    158      */
    159     public static String stringArrayToString(String[] str) {
    160         return stringArrayToString(str, "");
    161     }
    162 
    163     /**
    164      * 将字符数组转换成字符串
    165      * 
    166      * @param str
    167      * @param separator
    168      *            各个字符串之间的分隔符
    169      * @return
    170      */
    171     public static String charArrayToString(char[] ch, String separator) {
    172         StringBuffer sb = new StringBuffer();
    173         for (int i = 0; i < ch.length; i++) {
    174             sb.append(ch[i]);
    175             if (ch.length != (i + 1)) {
    176                 sb.append(separator);
    177             }
    178         }
    179         return sb.toString();
    180     }
    181 
    182     /**
    183      * 将字符数组转换成字符串
    184      * 
    185      * @param str
    186      * @return
    187      */
    188     public static String charArrayToString(char[] ch) {
    189         return charArrayToString(ch, " ");
    190     }
    191 
    192     /**
    193      * 取汉字的首字母
    194      * 
    195      * @param src
    196      * @param isCapital
    197      *            是否是大写
    198      * @return
    199      */
    200     public static char[] getHeadByChar(char src, boolean isCapital) {
    201         // 如果不是汉字直接返回
    202         if (src <= 128) {
    203             return new char[] { src };
    204         }
    205         // 获取所有的拼音
    206         String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src);
    207 
    208         // 创建返回对象
    209         int polyphoneSize = pinyingStr.length;
    210         char[] headChars = new char[polyphoneSize];
    211         int i = 0;
    212         // 截取首字符
    213         for (String s : pinyingStr) {
    214             char headChar = s.charAt(0);
    215             // 首字母是否大写,默认是小写
    216             if (isCapital) {
    217                 headChars[i] = Character.toUpperCase(headChar);
    218             } else {
    219                 headChars[i] = headChar;
    220             }
    221             i++;
    222         }
    223 
    224         return headChars;
    225     }
    226 
    227     /**
    228      * 取汉字的首字母(默认是大写)
    229      * 
    230      * @param src
    231      * @return
    232      */
    233     public static char[] getHeadByChar(char src) {
    234         return getHeadByChar(src, true);
    235     }
    236 
    237     /**
    238      * 查找字符串首字母
    239      * 
    240      * @param src
    241      * @return
    242      */
    243     public static String[] getHeadByString(String src) {
    244         return getHeadByString(src, true);
    245     }
    246 
    247     /**
    248      * 查找字符串首字母
    249      * 
    250      * @param src
    251      * @param isCapital
    252      *            是否大写
    253      * @return
    254      */
    255     public static String[] getHeadByString(String src, boolean isCapital) {
    256         return getHeadByString(src, isCapital, null);
    257     }
    258 
    259     /**
    260      * 查找字符串首字母
    261      * 
    262      * @param src
    263      * @param isCapital
    264      *            是否大写
    265      * @param separator
    266      *            分隔符
    267      * @return
    268      */
    269     public static String[] getHeadByString(String src, boolean isCapital,
    270             String separator) {
    271         char[] chars = src.toCharArray();
    272         String[] headString = new String[chars.length];
    273         int i = 0;
    274         for (char ch : chars) {
    275 
    276             char[] chs = getHeadByChar(ch, isCapital);
    277             StringBuffer sb = new StringBuffer();
    278             if (null != separator) {
    279                 int j = 1;
    280 
    281                 for (char ch1 : chs) {
    282                     sb.append(ch1);
    283                     if (j != chs.length) {
    284                         sb.append(separator);
    285                     }
    286                     j++;
    287                 }
    288             } else {
    289                 sb.append(chs[0]);
    290             }
    291             headString[i] = sb.toString();
    292             i++;
    293         }
    294         return headString;
    295     }
    296     
    297     public static void main(String[] args) {
    298         // pin4j 简码 和 城市编码 
    299         String s1 = "中华人民共和国"; 
    300         String[] headArray = getHeadByString(s1); // 获得每个汉字拼音首字母
    301         System.out.println(Arrays.toString(headArray));
    302         
    303         String s2 ="长城" ; 
    304         System.out.println(Arrays.toString(stringToPinyin(s2,true,",")));
    305         
    306         String s3 ="长";
    307         System.out.println(Arrays.toString(stringToPinyin(s3,true,",")));
    308     }
    309 }
  • 相关阅读:
    14_最长公共前缀_字符串_简单
    5. 最长回文子串_字符串_中等
    187. 重复的DNA序列_字符串_中等
    lr_bn_batchsize_deformable convolution_Hard negative mining
    彻底搞懂HTTPs的加密原理
    20. 有效的括号_字符串_简单
    13_罗马数字转整数_字符串_简单
    202_快乐数_数组_简答
    组件
    World
  • 原文地址:https://www.cnblogs.com/zlw-xf/p/7995187.html
Copyright © 2011-2022 走看看