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 }
  • 相关阅读:
    UVA 408 (13.07.28)
    linux概念之用户,组及权限
    Java实现 蓝桥杯 历届试题 网络寻路
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 九宫重排
    Java实现 蓝桥杯 历届试题 九宫重排
  • 原文地址:https://www.cnblogs.com/zlw-xf/p/7995187.html
Copyright © 2011-2022 走看看