首页 > 编程 > Java > 正文

java汉字转拼音工具类分享

2019-11-26 10:21:16
字体:
来源:转载
供稿:网友

本文实例为大家分享了java汉字转拼音工具类的具体代码,供大家参考,具体内容如下

import com.google.common.base.Strings;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.ArrayList;import java.util.List;import java.util.Locale;import java.util.TreeSet;public class PinyinUtils {  private static final Logger logger = LoggerFactory.getLogger(PinyinUtils.class);  /**   * 单字解析   *   * @param str first   * @return   */  public static String[] convert(String str) {    String[] reslut = null;    HanyuPinyinOutputFormat hanyuPinyinOutputFormat = new HanyuPinyinOutputFormat();    hanyuPinyinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);    try {      reslut = PinyinHelper.toHanyuPinyinStringArray(str.charAt(0), hanyuPinyinOutputFormat);      TreeSet<String> stringTreeSet = new TreeSet<>();      for (int i = 0; i < reslut.length; i++) {        if(reslut.length >=3) {          break;        }        stringTreeSet.add(reslut[i].replace("u:","v"));      }      reslut = new String[stringTreeSet.size()];      reslut = stringTreeSet.toArray(reslut);    } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {      badHanyuPinyinOutputFormatCombination.printStackTrace();    } catch (Exception e) {      logger.error("[convert]: ", e);    }    return reslut;  }  /**   * 词组解析(全写)   *   * @param chs   * @return   */  public static String getSelling(String chs) {    return translate(chs, false);  }  /**   * 汉字转拼音   *   * @param chs   * @param acronym   * @return   */  private static String translate(String chs, boolean acronym) {    StringBuffer buffer=new StringBuffer();    if (Strings.isNullOrEmpty(chs))      return "";    try {      List<List<String>> temps = new ArrayList<>();      int len = chs.length();      int len1 = 0;      for (int i = 0; i < len; i++) {        List<String> stringList = new ArrayList<>();        String key = chs.charAt(i) + "";        if (key.getBytes().length >= 2) {          String[] temp = convert(key);          if(temp.length == 0) {            continue;          }          if (temp == null) {            stringList.add("");          } else {            for (String v : temp) {              stringList.add(v);            }          }        } else {          stringList.add(key);        }        temps.add(stringList);        len1++;      }      List<List<String>> t = new ArrayList<>();      for (int i = 0; i < len1; i++) {        List<String> currentList = new ArrayList<>();        List<String> stringList = temps.get(i);        if (stringList != null) {          for (String s : stringList) {            if (acronym) {              s = s.charAt(0) + "";            }            if (i > 0) {              List<String> preList = t.get(i - 1);              if (preList != null) {                for (String s1 : preList) {                  currentList.add(s1 + s);                }              }            }else{              currentList.add(s);            }          }        }        t.add(i, currentList);      }      if (t.size()>0){        List<String> currentList= t.get(t.size()-1);        if (currentList!=null){          for(String current : currentList){            buffer.append(current);            buffer.append("");          }        }      }      return buffer.toString();    } catch (Exception e) {      logger.error("[getSortLetters]: ", e);      return "";    }  }  /**   * 词组解析(缩写)   *   * @param chs   * @return   */  public static String getSmallSelling(String chs) {    return translate(chs, true);  }  /**   * 获取首字母   *   * @return   */  public static String getSortLetters(String pingyin) {    try {      String sortString = pingyin.substring(0, 1).toUpperCase(Locale.getDefault());      // 正则表达式,判断首字母是否是英文字母      if (sortString.matches("[A-Z]")) {        return sortString.toUpperCase(Locale.getDefault());      }    } catch (Exception e) {      logger.error("[getSortLetters]: ", e);    }    return "#";  }  public static void main(String [] args) {    PinyinUtils p = new PinyinUtils();    System.out.println(p.getSelling("单个"));    System.out.println(p.getSmallSelling("测试"));  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表