在Java中如何使用Pinyin4j简单教程

killads
发布于 2020-8-31 19:24
浏览
1收藏

Pinyin4j是流行的Java库,支持汉字和拼音之间的转换。 拼音输出格式可以自定义。 在项目中,通常存在一些场景,要求用户输入汉字然后转换为拼音。 目前,Pinyin4j可以派上用场

有自己私服的可以下载到私服,然后maven引入

<dependency>
      <groupId>net.sourceforge.pinyin4j</groupId>
       <artifactId>pinyin4j</artifactId>
       <version>2.5.0</version>
   </dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

或者自己去pinyin4j官网下载http://pinyin4j.sourceforge.net

Pinyin4j支持方式:

1.支持简体中文和繁体中文字符
2.支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼 法和国语罗马字
3.支持多音字,即可以获取一个中文字符的多种发音
4.支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 “ˉ”,阳平"ˊ",上声"ˇ",去声"ˋ")的输出
Pinyin4j支持多种格式:

全部大小YHY
全部大写(中间加字符串*)
全部小写
全部小写(中间加字符串*)
返回首字母大写Y
返回首字母小写y
针对什么情况,分别给出使用方法:

Pinyin4j pinyin4j = new Pinyin4j();
String first1 = pinyin4j.toPinYinUppercase("测试中文");
String first2 = pinyin4j.toPinYinUppercase("测试中文", "**");
String first3 = pinyin4j.toPinYinLowercase("测试中文");
String first4 = pinyin4j.toPinYinLowercase("测试中文","**");
String first5 = pinyin4j.toPinYinUppercaseInitials("测试中文");
String first6 = pinyin4j.toPinYinLowercaseInitials("测试中文");
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

然后给出封装的工具类java代码:

import java.util.HashSet;
import java.util.Set;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class Pinyin4jUtil {
 
 /**
  * getFirstSpellPinYin:(多音字的时候获取第一个). <br/> 
  * @param src  传入的拼音字符串,以逗号隔开
  * @param isFullSpell 是否全拼,true:全拼,false:第一个汉字全拼(其它汉字取首字母)
  * @return 第一个拼音
  */
 public static String getFirstSpellPinYin(String src , boolean isFullSpell) {
  String targetStr = Pinyin4jUtil.makeStringByStringSet(Pinyin4jUtil.getPinyin(src, isFullSpell));
  String[] split = targetStr.split(",");
  if (split.length > 1) {
   targetStr = split[0];
  }
  return targetStr;
 }

 /**
  * makeStringByStringSet:(拼音字符串集合转换字符串(逗号分隔)). <br/> 
  * @param stringSet  拼音集合
  * @return  带逗号字符串
  */
 public static String makeStringByStringSet(Set<String> stringSet) {
  StringBuilder str = new StringBuilder();
  int i = 0;
  if (stringSet.size() > 0) {
   for (String s : stringSet) {
    if (i == stringSet.size() - 1) {
     str.append(s);
    } else {
     str.append(s + ",");
    }
    i++;
   }
  }
  return str.toString().toLowerCase();
 }

 /**
  * getPinyin:(获取汉字拼音). <br/> 
  * @param src   汉字
  * @param isFullPin  是否全拼,如果为true:全拼,false:首字全拼
  * @return
  */
 public static Set<String> getPinyin(String src, boolean isFullSpell) {
  if (src != null && !src.trim().equalsIgnoreCase("")) {
   char[] srcChar;
   srcChar = src.toCharArray();
   // 汉语拼音格式输出类
   HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat();

   // 输出设置,大小写,音标方式等
   hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
   hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
   hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);

   String[][] temp = new String[src.length()][];
   for (int i = 0; i < srcChar.length; i++) {
    char c = srcChar[i];
    if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) {//中文
     try {
      temp[i] = PinyinHelper.toHanyuPinyinStringArray(
        srcChar[i], hanYuPinOutputFormat);
      if (!isFullSpell) {
       if (i == 0) {
        temp[i] = temp[i];
       } else {
        String[] tTemps = new String[temp[i].length];
        for (int j = 0; j < temp[i].length; j++) {
         char t = temp[i][j].charAt(0);
         tTemps[j] = Character.toString(t);
        }
        temp[i] = tTemps;
       }
      }
     } catch (BadHanyuPinyinOutputFormatCombination e) {
      e.printStackTrace();
     }
    } else if (((int) c >= 65 && (int) c <= 90)
      || ((int) c >= 97 && (int) c <= 122)) {//英文
     temp[i] = new String[] { String.valueOf(srcChar[i]) };
    } else {
     temp[i] = new String[] { "" };
    }
   }
   String[] pingyinArray = exchange(temp);
   Set<String> pinyinSet = new HashSet<String>();
   for (int i = 0; i < pingyinArray.length; i++) {
    pinyinSet.add(pingyinArray[i]);
   }
   return pinyinSet;
  }
  return null;
 }

 /**
  * 递归
  * @param strJaggedArray
  * @return
  */
 public static String[] exchange(String[][] strJaggedArray) {
  String[][] temp = doExchange(strJaggedArray);
  return temp[0];
 }

 /**
  * 递归
  * @param strJaggedArray
  * @return
  */
 private static String[][] doExchange(String[][] strJaggedArray) {
  int len = strJaggedArray.length;
  if (len >= 2) {
   int len1 = strJaggedArray[0].length;
   int len2 = strJaggedArray[1].length;
   int newlen = len1 * len2;
   String[] temp = new String[newlen];
   int Index = 0;
   for (int i = 0; i < len1; i++) {
    for (int j = 0; j < len2; j++) {
     temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j];
     Index++;
    }
   }
   String[][] newArray = new String[len - 1][];
   for (int i = 2; i < len; i++) {
    newArray[i - 1] = strJaggedArray[i];
   }
   newArray[0] = temp;
   return doExchange(newArray);
  } else {
   return strJaggedArray;
  }
 }
 
 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.

 

分类
已于2020-9-1 16:41:17修改
1
收藏 1
回复
举报
1
1
回复
    相关推荐