3806850 发表于 2013-2-5 10:09:24

pinyin4j简介【转】

pinyin4j的主页:http://pinyin4j.sourceforge.net/

pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。

pinyin4j是一个支持将中文转换到拼音的Java开源类库。

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

1. 支持多种拼音系统:

汉语拼音
通用拼音
威氏拼音
注音二式
雅礼
国语罗马字
2. 支持多音字

    能够根据上下文获得正确的拼音

3. 支持多种拼音格式

大小写
支持unicode ü 、v 和 u
支持数字音调(lü3)、音调符号 (lǚ)和无音调标识(lü)
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 Pinyin{/*** 将汉字转换为全拼* * @param src* @return String*/public static String getPinYin(String src){   char[] t1 = null;   t1 = src.toCharArray();   // System.out.println(t1.length);   String[] t2 = new String;   // System.out.println(t2.length);   // 设置汉字拼音输出的格式   HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();   t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);   t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);   t3.setVCharType(HanyuPinyinVCharType.WITH_V);   String t4 = "";   int t0 = t1.length;   try   {    for (int i = 0; i < t0; i++)    {   // 判断能否为汉字字符   // System.out.println(t1);   if (Character.toString(t1).matches("[\\u4E00-\\u9FA5]+"))   {      t2 = PinyinHelper.toHanyuPinyinStringArray(t1, t3);// 将汉字的几种全拼都存到t2数组中      t4 += t2;// 取出该汉字全拼的第一种读音并连接到字符串t4后   }   else   {      // 如果不是汉字字符,间接取出字符并连接到字符串t4后      t4 += Character.toString(t1);   }    }   }   catch (BadHanyuPinyinOutputFormatCombination e)   {    // TODO Auto-generated catch block    e.printStackTrace();   }   return t4;}/*** 提取每个汉字的首字母* * @param str* @return String*/public static String getPinYinHeadChar(String str){   String convert = "";   for (int j = 0; j < str.length(); j++)   {    char word = str.charAt(j);    // 提取汉字的首字母    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);    if (pinyinArray != null)    {   convert += pinyinArray.charAt(0);    }    else    {   convert += word;    }   }   return convert;}/*** 将字符串转换成ASCII码* * @param cnStr* @return String*/public static String getCnASCII(String cnStr){   StringBuffer strBuf = new StringBuffer();   // 将字符串转换成字节序列   byte[] bGBK = cnStr.getBytes();   for (int i = 0; i < bGBK.length; i++)   {    // System.out.println(Integer.toHexString(bGBK & 0xff));    // 将每个字符转换成ASCII码    strBuf.append(Integer.toHexString(bGBK & 0xff));   }   return strBuf.toString();}public static void main(String[] args){   String cnStr = "嘅囧誰說壞學生來勼髮視頻裆児";   System.out.println(getPinYin(cnStr));   System.out.println(getPinYinHeadChar(cnStr));   System.out.println(getCnASCII(cnStr));}}实例:

利用Java开源库把汉字转拼音

最近做的项目,因为下拉框中的项目太多,需要有个过滤的方法。我想的是键入汉语拼音首字母即时过滤下拉内容。

在网上找了好一会,发现了有个专门用来将中文转换成汉语拼音的Java的开源库,Pinyin4j,

下载地址:pinyin4j-2.5.0.zip

基本用法,如下示例

Java代码/** * 汉字转换位汉语拼音,英文字符不变 * @author xuke * */   public class Cn2Spell {         /**      * 汉字转换位汉语拼音首字母,英文字符不变      * @param chines 汉字      * @return 拼音      */       public static String converterToFirstSpell(String chines){                  String pinyinName = "";            char[] nameChar = chines.toCharArray();             HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();             defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);             defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);            for (int i = 0; i < nameChar.length; i++) {                if (nameChar > 128) {                  try {                         pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar, defaultFormat).charAt(0);                     } catch (BadHanyuPinyinOutputFormatCombination e) {                         e.printStackTrace();                     }               }else{                     pinyinName += nameChar;               }             }            return pinyinName;         }         /**      * 汉字转换位汉语拼音,英文字符不变      * @param chines 汉字      * @return 拼音      */       public static String converterToSpell(String chines){                     String pinyinName = "";            char[] nameChar = chines.toCharArray();             HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();             defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);             defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);            for (int i = 0; i < nameChar.length; i++) {                if (nameChar > 128) {                  try {                         pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar, defaultFormat);                     } catch (BadHanyuPinyinOutputFormatCombination e) {                         e.printStackTrace();                     }               }else{                     pinyinName += nameChar;               }             }            return pinyinName;         }                public static void main(String[] args) {             System.out.println(converterToFirstSpell("欢迎来到最棒的Java中文社区"));         }    }   /** * 汉字转换位汉语拼音,英文字符不变 * @author xuke * */public class Cn2Spell {   /**    * 汉字转换位汉语拼音首字母,英文字符不变    * @param chines 汉字    * @return 拼音    */    public static String converterToFirstSpell(String chines){            String pinyinName = "";      char[] nameChar = chines.toCharArray();      HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();      defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);      defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);      for (int i = 0; i < nameChar.length; i++) {            if (nameChar > 128) {                try {                  pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar, defaultFormat).charAt(0);                } catch (BadHanyuPinyinOutputFormatCombination e) {                  e.printStackTrace();                }            }else{             pinyinName += nameChar;            }      }      return pinyinName;    }   /**    * 汉字转换位汉语拼音,英文字符不变    * @param chines 汉字    * @return 拼音    */    public static String converterToSpell(String chines){            String pinyinName = "";      char[] nameChar = chines.toCharArray();      HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();      defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);      defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);      for (int i = 0; i < nameChar.length; i++) {            if (nameChar > 128) {                try {                  pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar, defaultFormat);                } catch (BadHanyuPinyinOutputFormatCombination e) {                  e.printStackTrace();                }            }else{             pinyinName += nameChar;            }      }      return pinyinName;    }      public static void main(String[] args) {System.out.println(converterToFirstSpell("欢迎来到最棒的Java中文社区")); }}以上一个是完全转换成汉语拼音的,另一个是只转换首字母的,遇到ASCII字符都不转换,保留。
页: [1]
查看完整版本: pinyin4j简介【转】