| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
123bt
11年前发布

java 汉字转化为拼音工具类

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