java输入字母_JAVA如何把输入中文输出汉语拼音字母的原理与代码

按照拼音区间不全面,很多常见字不能覆盖。

比如:怡、骟、骠、骢 等。

比较好的解决方案就是找一份全面的拼音汉字对照表,生成Map来查找。

下面是按照拼音区间的思路实现的不完全工具类:package com.tudou.utils.lang;

import java.nio.ByteBuffer;

import java.util.TreeMap;

/**

*

* 汉字转化为全拼

*

* JDK版本: 6

*

* 需要注意的是:这里面利用gb2312的编码规则,根据拼音区间来获取拼音,主要可以练习TreeMap的使用。

* 但其实拼音规则涵盖的中文并不全面,要求较高的地方不建议使用这个类。

* 附上拼音和汉字对照表pinyin1.txt,可以利用这个文件建立Map。

*/

public class CharactorTool {

private static TreeMap spellTree = new TreeMap();

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));

}

}

2011年6月01日 12:45

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值