/**  * @(#)CnToSpell.java   * 版权声明 Easydozer 版权所有 违者必究   *  * 修订记录:  * 1)更改者:Easydozer  *   时 间:2004-10-20   *   描 述:创建  */ package com.easydozer.commons.util; 
import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Set; 
/**  * <pre>汉字转化为全拼</pre>  * <BR><DL><DT><B>JDK版本:</B></DT><BR><DD>1.4</DD></DL>  * @author   谢计生  * @version  1.0  * @see        * @since   1.0  */ public class CnToSpell {   private static LinkedHashMap spellMap = null; 
  static   {     if(spellMap == null){       spellMap = new LinkedHashMap(400);     }     initialize();     System.out.println("Chinese transfer Spell Done.");   } 
  private CnToSpell()   {   } 
  private static void spellPut(String spell,int ascii)   {     spellMap.put(spell,new Integer(ascii));   } 
  private static void initialize()   {     spellPut("a", -20319);     spellPut("ai", -20317);     spellPut("an", -20304);     spellPut("ang", -20295);     spellPut("ao", -20292);     spellPut("ba", -20283);     spellPut("bai", -20265);     spellPut("ban", -20257);     spellPut("bang", -20242);     spellPut("bao", -20230);     spellPut("bei", -20051);     spellPut("ben", -20036);     spellPut("beng", -20032);     spellPut("bi", -20026);     spellPut("bian", -20002);     spellPut("biao", -19990);     spellPut("bie", -19986);     spellPut("bin", -19982);     spellPut("bing", -19976);     spellPut("bo", -19805);     spellPut("bu", -19784);     spellPut("ca", -19775);     spellPut("cai", -19774);     spellPut("can", -19763);     spellPut("cang", -19756);     spellPut("cao", -19751);     spellPut("ce", -19746);     spellPut("ceng", -19741);     spellPut("cha", -19739);     spellPut("chai", -19728);     spellPut("chan", -19725);     spellPut("chang", -19715);     spellPut("chao", -19540);     spellPut("che", -19531);     spellPut("chen", -19525);     spellPut("cheng", -19515);     spellPut("chi", -19500);     spellPut("chong", -19484);     spellPut("chou", -19479);     spellPut("chu", -19467);     spellPut("chuai", -19289);     spellPut("chuan", -19288);     spellPut("chuang", -19281);     spellPut("chui", -19275);     spellPut("chun", -19270);     spellPut("chuo", -19263);     spellPut("ci", -19261);     spellPut("cong", -19249);     spellPut("cou", -19243);     spellPut("cu", -19242);     spellPut("cuan", -19238);     spellPut("cui", -19235);     spellPut("cun", -19227);     spellPut("cuo", -19224);     spellPut("da", -19218);     spellPut("dai", -19212);     spellPut("dan", -19038);     spellPut("dang", -19023);     spellPut("dao", -19018);     spellPut("de", -19006);     spellPut("deng", -19003);     spellPut("di", -18996);     spellPut("dian", -18977);     spellPut("diao", -18961);     spellPut("die", -18952);     spellPut("ding", -18783);     spellPut("diu", -18774);     spellPut("dong", -18773);     spellPut("dou", -18763);     spellPut("du", -18756);     spellPut("duan", -18741);     spellPut("dui", -18735);     spellPut("dun", -18731);     spellPut("duo", -18722);     spellPut("e", -18710);     spellPut("en", -18697);     spellPut("er", -18696);     spellPut("fa", -18526);     spellPut("fan", -18518);     spellPut("fang", -18501);     spellPut("fei", -18490);     spellPut("fen", -18478);     spellPut("feng", -18463);     spellPut("fo", -18448);     spellPut("fou", -18447);     spellPut("fu", -18446);     spellPut("ga", -18239);     spellPut("gai", -18237);     spellPut("gan", -18231);     spellPut("gang", -18220);     spellPut("gao", -18211);     spellPut("ge", -18201);     spellPut("gei", -18184);     spellPut("gen", -18183);     spellPut("geng", -18181);     spellPut("gong", -18012);     spellPut("gou", -17997);     spellPut("gu", -17988);     spellPut("gua", -17970);     spellPut("guai", -17964);     spellPut("guan", -17961);     spellPut("guang", -17950);     spellPut("gui", -17947);     spellPut("gun", -17931);     spellPut("guo", -17928);     spellPut("ha", -17922);     spellPut("hai", -17759);     spellPut("han", -17752);     spellPut("hang", -17733);     spellPut("hao", -17730);     spellPut("he", -17721);     spellPut("hei", -17703);     spellPut("hen", -17701);     spellPut("heng", -17697);     spellPut("hong", -17692);     spellPut("hou", -17683);     spellPut("hu", -17676);     spellPut("hua", -17496);     spellPut("huai", -17487);     spellPut("huan", -17482);     spellPut("huang", -17468);     spellPut("hui", -17454);     spellPut("hun", -17433);     spellPut("huo", -17427);     spellPut("ji", -17417);     spellPut("jia", -17202);     spellPut("jian", -17185);     spellPut("jiang", -16983);     spellPut("jiao", -16970);     spellPut("jie", -16942);     spellPut("jin", -16915);     spellPut("jing", -16733);     spellPut("jiong", -16708);     spellPut("jiu", -16706);     spellPut("ju", -16689);     spellPut("juan", -16664);     spellPut("jue", -16657);     spellPut("jun", -16647);     spellPut("ka", -16474);     spellPut("kai", -16470);     spellPut("kan", -16465);     spellPut("kang", -16459);     spellPut("kao", -16452);     spellPut("ke", -16448);     spellPut("ken", -16433);     spellPut("keng", -16429);     spellPut("kong", -16427);     spellPut("kou", -16423);     spellPut("ku", -16419);     spellPut("kua", -16412);     spellPut("kuai", -16407);     spellPut("kuan", -16403);     spellPut("kuang", -16401);     spellPut("kui", -16393);     spellPut("kun", -16220);     spellPut("kuo", -16216);     spellPut("la", -16212);     spellPut("lai", -16205);     spellPut("lan", -16202);     spellPut("lang", -16187);     spellPut("lao", -16180);     spellPut("le", -16171);     spellPut("lei", -16169);     spellPut("leng", -16158);     spellPut("li", -16155);     spellPut("lia", -15959);     spellPut("lian", -15958);     spellPut("liang", -15944);     spellPut("liao", -15933);     spellPut("lie", -15920);     spellPut("lin", -15915);     spellPut("ling", -15903);     spellPut("liu", -15889);     spellPut("long", -15878);     spellPut("lou", -15707);     spellPut("lu", -15701);     spellPut("lv", -15681);     spellPut("luan", -15667);     spellPut("lue", -15661);     spellPut("lun", -15659);     spellPut("luo", -15652);     spellPut("ma", -15640);     spellPut("mai", -15631);     spellPut("man", -15625);     spellPut("mang", -15454);     spellPut("mao", -15448);     spellPut("me", -15436);     spellPut("mei", -15435);     spellPut("men", -15419);     spellPut("meng", -15416);     spellPut("mi", -15408);     spellPut("mian", -15394);     spellPut("miao", -15385);     spellPut("mie", -15377);     spellPut("min", -15375);     spellPut("ming", -15369);     spellPut("miu", -15363);     spellPut("mo", -15362);     spellPut("mou", -15183);     spellPut("mu", -15180);     spellPut("na", -15165);     spellPut("nai", -15158);     spellPut("nan", -15153);     spellPut("nang", -15150);     spellPut("nao", -15149);     spellPut("ne", -15144);     spellPut("nei", -15143);     spellPut("nen", -15141);     spellPut("neng", -15140);     spellPut("ni", -15139);     spellPut("nian", -15128);     spellPut("niang", -15121);     spellPut("niao", -15119);     spellPut("nie", -15117);     spellPut("nin", -15110);     spellPut("ning", -15109);     spellPut("niu", -14941);     spellPut("nong", -14937);     spellPut("nu", -14933);     spellPut("nv", -14930);     spellPut("nuan", -14929);     spellPut("nue", -14928);     spellPut("nuo", -14926);     spellPut("o", -14922);     spellPut("ou", -14921);     spellPut("pa", -14914);     spellPut("pai", -14908);     spellPut("pan", -14902);     spellPut("pang", -14894);     spellPut("pao", -14889);     spellPut("pei", -14882);     spellPut("pen", -14873);     spellPut("peng", -14871);     spellPut("pi", -14857);     spellPut("pian", -14678);     spellPut("piao", -14674);     spellPut("pie", -14670);     spellPut("pin", -14668);     spellPut("ping", -14663);     spellPut("po", -14654);     spellPut("pu", -14645);     spellPut("qi", -14630);     spellPut("qia", -14594);     spellPut("qian", -14429);     spellPut("qiang", -14407);     spellPut("qiao", -14399);     spellPut("qie", -14384);     spellPut("qin", -14379);     spellPut("qing", -14368);     spellPut("qiong", -14355);     spellPut("qiu", -14353);     spellPut("qu", -14345);     spellPut("quan", -14170);     spellPut("que", -14159);     spellPut("qun", -14151);     spellPut("ran", -14149);     spellPut("rang", -14145);     spellPut("rao", -14140);     spellPut("re", -14137);     spellPut("ren", -14135);     spellPut("reng", -14125);     spellPut("ri", -14123);     spellPut("rong", -14122);     spellPut("rou", -14112);     spellPut("ru", -14109);     spellPut("ruan", -14099);     spellPut("rui", -14097);     spellPut("run", -14094);     spellPut("ruo", -14092);     spellPut("sa", -14090);     spellPut("sai", -14087);     spellPut("san", -14083);     spellPut("sang", -13917);     spellPut("sao", -13914);     spellPut("se", -13910);     spellPut("sen", -13907);     spellPut("seng", -13906);     spellPut("sha", -13905);     spellPut("shai", -13896);     spellPut("shan", -13894);     spellPut("shang", -13878);     spellPut("shao", -13870);     spellPut("she", -13859);     spellPut("shen", -13847);     spellPut("sheng", -13831);     spellPut("shi", -13658);     spellPut("shou", -13611);     spellPut("shu", -13601);     spellPut("shua", -13406);     spellPut("shuai", -13404);     spellPut("shuan", -13400);     spellPut("shuang", -13398);     spellPut("shui", -13395);     spellPut("shun", -13391);     spellPut("shuo", -13387);     spellPut("si", -13383);     spellPut("song", -13367);     spellPut("sou", -13359);     spellPut("su", -13356);     spellPut("suan", -13343);     spellPut("sui", -13340);     spellPut("sun", -13329);     spellPut("suo", -13326);     spellPut("ta", -13318);     spellPut("tai", -13147);     spellPut("tan", -13138);     spellPut("tang", -13120);     spellPut("tao", -13107);     spellPut("te", -13096);     spellPut("teng", -13095);     spellPut("ti", -13091);     spellPut("tian", -13076);     spellPut("tiao", -13068);     spellPut("tie", -13063);     spellPut("ting", -13060);     spellPut("tong", -12888);     spellPut("tou", -12875);     spellPut("tu", -12871);     spellPut("tuan", -12860);     spellPut("tui", -12858);     spellPut("tun", -12852);     spellPut("tuo", -12849);     spellPut("wa", -12838);     spellPut("wai", -12831);     spellPut("wan", -12829);     spellPut("wang", -12812);     spellPut("wei", -12802);     spellPut("wen", -12607);     spellPut("weng", -12597);     spellPut("wo", -12594);     spellPut("wu", -12585);     spellPut("xi", -12556);     spellPut("xia", -12359);     spellPut("xian", -12346);     spellPut("xiang", -12320);     spellPut("xiao", -12300);     spellPut("xie", -12120);     spellPut("xin", -12099);     spellPut("xing", -12089);     spellPut("xiong", -12074);     spellPut("xiu", -12067);     spellPut("xu", -12058);     spellPut("xuan", -12039);     spellPut("xue", -11867);     spellPut("xun", -11861);     spellPut("ya", -11847);     spellPut("yan", -11831);     spellPut("yang", -11798);     spellPut("yao", -11781);     spellPut("ye", -11604);     spellPut("yi", -11589);     spellPut("yin", -11536);     spellPut("ying", -11358);     spellPut("yo", -11340);     spellPut("yong", -11339);     spellPut("you", -11324);     spellPut("yu", -11303);     spellPut("yuan", -11097);     spellPut("yue", -11077);     spellPut("yun", -11067);     spellPut("za", -11055);     spellPut("zai", -11052);     spellPut("zan", -11045);     spellPut("zang", -11041);     spellPut("zao", -11038);     spellPut("ze", -11024);     spellPut("zei", -11020);     spellPut("zen", -11019);     spellPut("zeng", -11018);     spellPut("zha", -11014);     spellPut("zhai", -10838);     spellPut("zhan", -10832);     spellPut("zhang", -10815);     spellPut("zhao", -10800);     spellPut("zhe", -10790);     spellPut("zhen", -10780);     spellPut("zheng", -10764);     spellPut("zhi", -10587);     spellPut("zhong", -10544);     spellPut("zhou", -10533);     spellPut("zhu", -10519);     spellPut("zhua", -10331);     spellPut("zhuai", -10329);     spellPut("zhuan", -10328);     spellPut("zhuang", -10322);     spellPut("zhui", -10315);     spellPut("zhun", -10309);     spellPut("zhuo", -10307);     spellPut("zi", -10296);     spellPut("zong", -10281);     spellPut("zou", -10274);     spellPut("zu", -10270);     spellPut("zuan", -10262);     spellPut("zui", -10260);     spellPut("zun", -10256);     spellPut("zuo", -10254);   } 
  /**    * 获得单个汉字的Ascii.    * @param cn char    * 汉字字符    * @return int    * 错误返回 0,否则返回ascii    */   public static int getCnAscii(char cn)   {     byte[] bytes = (String.valueOf(cn)).getBytes();     if(bytes == null || bytes.length > 2 || bytes.length <= 0){ //错误       return 0;     }     if(bytes.length == 1){ //英文字符       return bytes[0];     }     if(bytes.length == 2){ //中文字符       int hightByte = 256 + bytes[0];       int lowByte = 256 + bytes[1]; 
      int ascii = (256 * hightByte + lowByte) - 256 * 256; 
      //System.out.println("ASCII=" + ascii); 
      return ascii;     } 
    return 0; //错误   } 
  /**    * 根据ASCII码到SpellMap中查找对应的拼音    * @param ascii int    * 字符对应的ASCII    * @return String    * 拼音,首先判断ASCII是否>0&<160,如果是返回对应的字符,    * <BR>否则到SpellMap中查找,如果没有找到拼音,则返回null,如果找到则返回拼音.    */   public static String getSpellByAscii(int ascii)   {     if(ascii > 0 && ascii < 160){ //单字符       return String.valueOf((char)ascii);     } 
    if(ascii < -20319 || ascii > -10247){ //不知道的字符       return null;     } 
    Set keySet = spellMap.keySet();     Iterator it = keySet.iterator(); 
    String spell0 = null;;     String spell = null; 
    int asciiRang0 = -20319;     int asciiRang;     while(it.hasNext()){ 
      spell = (String)it.next();       Object valObj = spellMap.get(spell);       if(valObj instanceof Integer){         asciiRang = ((Integer)valObj).intValue(); 
        if(ascii >= asciiRang0 && ascii < asciiRang){ //区间找到           return(spell0 == null) ? spell : spell0;         }         else{           spell0 = spell;           asciiRang0 = asciiRang;         }       }     } 
    return null; 
  } 
  /**    * 返回字符串的全拼,是汉字转化为全拼,其它字符不进行转换    * @param cnStr String    * 字符串    * @return String    * 转换成全拼后的字符串    */   public static String getFullSpell(String cnStr)   {     if(null == cnStr || "".equals(cnStr.trim())){       return cnStr;     } 
    char[] chars = cnStr.toCharArray();     StringBuffer retuBuf = new StringBuffer();     for(int i = 0,Len = chars.length;i < Len;i++){       int ascii = getCnAscii(chars[i]);       if(ascii == 0){ //取ascii时出错         retuBuf.append(chars[i]);       }       else{         String spell = getSpellByAscii(ascii);         if(spell == null){           retuBuf.append(chars[i]);         }         else{           retuBuf.append(spell);         } // end of if spell == null       } // end of if ascii <= -20400     } // end of for 
    return retuBuf.toString();   } 
  public static String getFirstSpell(String cnStr)   {     return null;   } 
  public static void main(String[] args)   {     String str = null;     str = "谢海101普降喜雨";     System.out.println("Spell=" + CnToSpell.getFullSpell(str));          str = "张牙舞爪》。,";     System.out.println("Spell=" + CnToSpell.getFullSpell(str));          str = "李鹏,可耻下场。";     System.out.println("Spell=" + CnToSpell.getFullSpell(str));          str = "猪油,猪八戒。";     System.out.println("Spell=" + CnToSpell.getFullSpell(str));   } }
   
 
  |