pinyin4j将中文转换拼音简单强大

 

一个强大的中文转换拼音的开源组件。

package com.unutrip.remoting.ws;

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;

/**
 *
 * pinyin4j使用
 *
 * @author longgangbai
 *
 */
public class CNSpell {
 public static HanyuPinyinToneType[] toneTypes = new HanyuPinyinToneType[] {
   HanyuPinyinToneType.WITH_TONE_NUMBER,
   HanyuPinyinToneType.WITHOUT_TONE,
   HanyuPinyinToneType.WITH_TONE_MARK };
 public static HanyuPinyinVCharType[] vCharTypes = new HanyuPinyinVCharType[] {
   HanyuPinyinVCharType.WITH_U_AND_COLON, HanyuPinyinVCharType.WITH_V,
   HanyuPinyinVCharType.WITH_U_UNICODE };
 public static HanyuPinyinCaseType[] caseTypes = new HanyuPinyinCaseType[] {
   HanyuPinyinCaseType.LOWERCASE, HanyuPinyinCaseType.UPPERCASE };

 /**
  * 将中文字符转换为相应的数组
  *
  * @param chineseCharacter
  * @param toneSelection
  * @param vcharSelection
  * @param caseSelection
  */
 private static void updateFormattedText(String chineseCharacter,
   HanyuPinyinToneType toneSelection,
   HanyuPinyinVCharType vcharSelection,
   HanyuPinyinCaseType caseSelection) {
  // 拼音格式化对象
  HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
  // 设置中文声调
  if (toneSelection != null) {
   if (toneTypes[0] == toneSelection) {
    outputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);
   } else if (toneTypes[1] == toneSelection) {
    outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
   } else if (toneTypes[2] == toneSelection) {
    outputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
   }
  }
  // 设置特殊拼音的转换
  if (vcharSelection != null) {
   if (vCharTypes[0] == vcharSelection) {
    outputFormat
      .setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);
   } else if (vCharTypes[1] == vcharSelection) {
    outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
   } else if (vCharTypes[2] == vcharSelection) {
    outputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
   }
  }
  // 设置转换的拼音的大小写
  if (caseSelection != null) {
   if (caseTypes[0] == caseSelection) {
    outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
   } else if (caseTypes[1] == caseSelection) {
    outputFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
   }
  }
  // 获取字符串
  char[] cnStr = chineseCharacter.toCharArray();
  for (char chineseChar : cnStr) {
   // 将字符转换为拼音数组
   String[] pinyinArray = null;
   try {
    pinyinArray = PinyinHelper.toHanyuPinyinStringArray(
      chineseChar, outputFormat);
   } catch (BadHanyuPinyinOutputFormatCombination e1) {
    e1.printStackTrace();
   }
   String outputString = concatPinyinStringArray(pinyinArray);
   System.out.println(outputString);
  }

 }

 /**
  * 测试中文转换拼音方法
  *
  * @param args
  */
 public static void main(String[] args) {
  updateFormattedText("我是中国人!", HanyuPinyinToneType.WITH_TONE_MARK,
    HanyuPinyinVCharType.WITH_U_UNICODE,
    HanyuPinyinCaseType.UPPERCASE);
 }

 /**
  * 将转换的拼音数组转换为字符串
  *
  * @param pinyinArray
  * @return
  */
 private static String concatPinyinStringArray(String[] pinyinArray) {
  StringBuffer pinyinStrBuf = new StringBuffer();

  if ((null != pinyinArray) && (pinyinArray.length > 0)) {
   for (int i = 0; i < pinyinArray.length; i++) {
    pinyinStrBuf.append(pinyinArray[i]);
    pinyinStrBuf.append(System.getProperty("line.separator"));
   }
  }
  String outputString = pinyinStrBuf.toString();
  return outputString;
 }
}

你可能感兴趣的:(.net)