`
chenzugang
  • 浏览: 10821 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

根据GB2312汉字区位码获取汉字拼音的工具类

阅读更多
申明:
本工具类的原型来自互联网,本人作了算法上的调整。所以严格上不算原创,只能算是编著。

主要思路:
根据gb2312汉字的区位码,建立区位码与拼音的对应关系,因为一定范围内的汉字区位码的拼音是一样的,例如,如果汉字的区位码在(20317,20319]范围内,那么其拼音为“a”。
所以本工具类首先建立连个数组,一个边界放区位码,何谓边界区位码,如20317与20318两个区位码相连续,但是其对应的拼音一个是“ai”,一个是“a”,不连续,那么20317就是边界区位码;一个数组存放边界区位码对应的拼音,利用边界区位码作为数组的索引,对应的拼音为值。
对于给定的汉字,首先计算器区位码,而后根据取上不取下的原则找到其拼音对应的边界区位码,如一个汉字的区位码是20318,那么20318两端的边界区位码一个是20317,一个是20319,根据取上不取下原则,获得20318对应的区位码拼音的边界区位码20319,根据20319获得20318的拼音为“a”。

缺点:字符集不大,仅限于gb312;多音字只对应一个音,如“银行”,“行走”中的“行”字的拼音是一样的,所以如果外部输入都是汉字,由本工具转换为拼音去查同音,没有问题,如果外部输入拼音,就有问题。



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

    private static int[] positionArray = new int[396];
    static {
        positionArray[395] = 20319;
        positionArray[394] = 20317;
        positionArray[393] = 20304;
        positionArray[392] = 20295;
        positionArray[391] = 20292;
        positionArray[390] = 20283;
        positionArray[389] = 20265;
        positionArray[388] = 20257;
        positionArray[387] = 20242;
        positionArray[386] = 20230;
        positionArray[385] = 20051;
        positionArray[384] = 20036;
        positionArray[383] = 20032;
        positionArray[382] = 20026;
        positionArray[381] = 20002;
        positionArray[380] = 19990;
        positionArray[379] = 19986;
        positionArray[378] = 19982;
        positionArray[377] = 19976;
        positionArray[376] = 19805;
        positionArray[375] = 19784;
        positionArray[374] = 19775;
        positionArray[373] = 19774;
        positionArray[372] = 19763;
        positionArray[371] = 19756;
        positionArray[370] = 19751;
        positionArray[369] = 19746;
        positionArray[368] = 19741;
        positionArray[367] = 19739;
        positionArray[366] = 19728;
        positionArray[365] = 19725;
        positionArray[364] = 19715;
        positionArray[363] = 19540;
        positionArray[362] = 19531;
        positionArray[361] = 19525;
        positionArray[360] = 19515;
        positionArray[359] = 19500;
        positionArray[358] = 19484;
        positionArray[357] = 19479;
        positionArray[356] = 19467;
        positionArray[355] = 19289;
        positionArray[354] = 19288;
        positionArray[353] = 19281;
        positionArray[352] = 19275;
        positionArray[351] = 19270;
        positionArray[350] = 19263;
        positionArray[349] = 19261;
        positionArray[348] = 19249;
        positionArray[347] = 19243;
        positionArray[346] = 19242;
        positionArray[345] = 19238;
        positionArray[344] = 19235;
        positionArray[343] = 19227;
        positionArray[342] = 19224;
        positionArray[341] = 19218;
        positionArray[340] = 19212;
        positionArray[339] = 19038;
        positionArray[338] = 19023;
        positionArray[337] = 19018;
        positionArray[336] = 19006;
        positionArray[335] = 19003;
        positionArray[334] = 18996;
        positionArray[333] = 18977;
        positionArray[332] = 18961;
        positionArray[331] = 18952;
        positionArray[330] = 18783;
        positionArray[329] = 18774;
        positionArray[328] = 18773;
        positionArray[327] = 18763;
        positionArray[326] = 18756;
        positionArray[325] = 18741;
        positionArray[324] = 18735;
        positionArray[323] = 18731;
        positionArray[322] = 18722;
        positionArray[321] = 18710;
        positionArray[320] = 18697;
        positionArray[319] = 18696;
        positionArray[318] = 18526;
        positionArray[317] = 18518;
        positionArray[316] = 18501;
        positionArray[315] = 18490;
        positionArray[314] = 18478;
        positionArray[313] = 18463;
        positionArray[312] = 18448;
        positionArray[311] = 18447;
        positionArray[310] = 18446;
        positionArray[309] = 18239;
        positionArray[308] = 18237;
        positionArray[307] = 18231;
        positionArray[306] = 18220;
        positionArray[305] = 18211;
        positionArray[304] = 18201;
        positionArray[303] = 18184;
        positionArray[302] = 18183;
        positionArray[301] = 18181;
        positionArray[300] = 18012;
        positionArray[299] = 17997;
        positionArray[298] = 17988;
        positionArray[297] = 17970;
        positionArray[296] = 17964;
        positionArray[295] = 17961;
        positionArray[294] = 17950;
        positionArray[293] = 17947;
        positionArray[292] = 17931;
        positionArray[291] = 17928;
        positionArray[290] = 17922;
        positionArray[289] = 17759;
        positionArray[288] = 17752;
        positionArray[287] = 17733;
        positionArray[286] = 17730;
        positionArray[285] = 17721;
        positionArray[284] = 17703;
        positionArray[283] = 17701;
        positionArray[282] = 17697;
        positionArray[281] = 17692;
        positionArray[280] = 17683;
        positionArray[279] = 17676;
        positionArray[278] = 17496;
        positionArray[277] = 17487;
        positionArray[276] = 17482;
        positionArray[275] = 17468;
        positionArray[274] = 17454;
        positionArray[273] = 17433;
        positionArray[272] = 17427;
        positionArray[271] = 17417;
        positionArray[270] = 17202;
        positionArray[269] = 17185;
        positionArray[268] = 16983;
        positionArray[267] = 16970;
        positionArray[266] = 16942;
        positionArray[265] = 16915;
        positionArray[264] = 16733;
        positionArray[263] = 16708;
        positionArray[262] = 16706;
        positionArray[261] = 16689;
        positionArray[260] = 16664;
        positionArray[259] = 16657;
        positionArray[258] = 16647;
        positionArray[257] = 16474;
        positionArray[256] = 16470;
        positionArray[255] = 16465;
        positionArray[254] = 16459;
        positionArray[253] = 16452;
        positionArray[252] = 16448;
        positionArray[251] = 16433;
        positionArray[250] = 16429;
        positionArray[249] = 16427;
        positionArray[248] = 16423;
        positionArray[247] = 16419;
        positionArray[246] = 16412;
        positionArray[245] = 16407;
        positionArray[244] = 16403;
        positionArray[243] = 16401;
        positionArray[242] = 16393;
        positionArray[241] = 16220;
        positionArray[240] = 16216;
        positionArray[239] = 16212;
        positionArray[238] = 16205;
        positionArray[237] = 16202;
        positionArray[236] = 16187;
        positionArray[235] = 16180;
        positionArray[234] = 16171;
        positionArray[233] = 16169;
        positionArray[232] = 16158;
        positionArray[231] = 16155;
        positionArray[230] = 15959;
        positionArray[229] = 15958;
        positionArray[228] = 15944;
        positionArray[227] = 15933;
        positionArray[226] = 15920;
        positionArray[225] = 15915;
        positionArray[224] = 15903;
        positionArray[223] = 15889;
        positionArray[222] = 15878;
        positionArray[221] = 15707;
        positionArray[220] = 15701;
        positionArray[219] = 15681;
        positionArray[218] = 15667;
        positionArray[217] = 15661;
        positionArray[216] = 15659;
        positionArray[215] = 15652;
        positionArray[214] = 15640;
        positionArray[213] = 15631;
        positionArray[212] = 15625;
        positionArray[211] = 15454;
        positionArray[210] = 15448;
        positionArray[209] = 15436;
        positionArray[208] = 15435;
        positionArray[207] = 15419;
        positionArray[206] = 15416;
        positionArray[205] = 15408;
        positionArray[204] = 15394;
        positionArray[203] = 15385;
        positionArray[202] = 15377;
        positionArray[201] = 15375;
        positionArray[200] = 15369;
        positionArray[199] = 15363;
        positionArray[198] = 15362;
        positionArray[197] = 15183;
        positionArray[196] = 15180;
        positionArray[195] = 15165;
        positionArray[194] = 15158;
        positionArray[193] = 15153;
        positionArray[192] = 15150;
        positionArray[191] = 15149;
        positionArray[190] = 15144;
        positionArray[189] = 15143;
        positionArray[188] = 15141;
        positionArray[187] = 15140;
        positionArray[186] = 15139;
        positionArray[185] = 15128;
        positionArray[184] = 15121;
        positionArray[183] = 15119;
        positionArray[182] = 15117;
        positionArray[181] = 15110;
        positionArray[180] = 15109;
        positionArray[179] = 14941;
        positionArray[178] = 14937;
        positionArray[177] = 14933;
        positionArray[176] = 14930;
        positionArray[175] = 14929;
        positionArray[174] = 14928;
        positionArray[173] = 14926;
        positionArray[172] = 14922;
        positionArray[171] = 14921;
        positionArray[170] = 14914;
        positionArray[169] = 14908;
        positionArray[168] = 14902;
        positionArray[167] = 14894;
        positionArray[166] = 14889;
        positionArray[165] = 14882;
        positionArray[164] = 14873;
        positionArray[163] = 14871;
        positionArray[162] = 14857;
        positionArray[161] = 14678;
        positionArray[160] = 14674;
        positionArray[159] = 14670;
        positionArray[158] = 14668;
        positionArray[157] = 14663;
        positionArray[156] = 14654;
        positionArray[155] = 14645;
        positionArray[154] = 14630;
        positionArray[153] = 14594;
        positionArray[152] = 14429;
        positionArray[151] = 14407;
        positionArray[150] = 14399;
        positionArray[149] = 14384;
        positionArray[148] = 14379;
        positionArray[147] = 14368;
        positionArray[146] = 14355;
        positionArray[145] = 14353;
        positionArray[144] = 14345;
        positionArray[143] = 14170;
        positionArray[142] = 14159;
        positionArray[141] = 14151;
        positionArray[140] = 14149;
        positionArray[139] = 14145;
        positionArray[138] = 14140;
        positionArray[137] = 14137;
        positionArray[136] = 14135;
        positionArray[135] = 14125;
        positionArray[134] = 14123;
        positionArray[133] = 14122;
        positionArray[132] = 14112;
        positionArray[131] = 14109;
        positionArray[130] = 14099;
        positionArray[129] = 14097;
        positionArray[128] = 14094;
        positionArray[127] = 14092;
        positionArray[126] = 14090;
        positionArray[125] = 14087;
        positionArray[124] = 14083;
        positionArray[123] = 13917;
        positionArray[122] = 13914;
        positionArray[121] = 13910;
        positionArray[120] = 13907;
        positionArray[119] = 13906;
        positionArray[118] = 13905;
        positionArray[117] = 13896;
        positionArray[116] = 13894;
        positionArray[115] = 13878;
        positionArray[114] = 13870;
        positionArray[113] = 13859;
        positionArray[112] = 13847;
        positionArray[111] = 13831;
        positionArray[110] = 13658;
        positionArray[109] = 13611;
        positionArray[108] = 13601;
        positionArray[107] = 13406;
        positionArray[106] = 13404;
        positionArray[105] = 13400;
        positionArray[104] = 13398;
        positionArray[103] = 13395;
        positionArray[102] = 13391;
        positionArray[101] = 13387;
        positionArray[100] = 13383;
        positionArray[99] = 13367;
        positionArray[98] = 13359;
        positionArray[97] = 13356;
        positionArray[96] = 13343;
        positionArray[95] = 13340;
        positionArray[94] = 13329;
        positionArray[93] = 13326;
        positionArray[92] = 13318;
        positionArray[91] = 13147;
        positionArray[90] = 13138;
        positionArray[89] = 13120;
        positionArray[88] = 13107;
        positionArray[87] = 13096;
        positionArray[86] = 13095;
        positionArray[85] = 13091;
        positionArray[84] = 13076;
        positionArray[83] = 13068;
        positionArray[82] = 13063;
        positionArray[81] = 13060;
        positionArray[80] = 12888;
        positionArray[79] = 12875;
        positionArray[78] = 12871;
        positionArray[77] = 12860;
        positionArray[76] = 12858;
        positionArray[75] = 12852;
        positionArray[74] = 12849;
        positionArray[73] = 12838;
        positionArray[72] = 12831;
        positionArray[71] = 12829;
        positionArray[70] = 12812;
        positionArray[69] = 12802;
        positionArray[68] = 12607;
        positionArray[67] = 12597;
        positionArray[66] = 12594;
        positionArray[65] = 12585;
        positionArray[64] = 12556;
        positionArray[63] = 12359;
        positionArray[62] = 12346;
        positionArray[61] = 12320;
        positionArray[60] = 12300;
        positionArray[59] = 12120;
        positionArray[58] = 12099;
        positionArray[57] = 12089;
        positionArray[56] = 12074;
        positionArray[55] = 12067;
        positionArray[54] = 12058;
        positionArray[53] = 12039;
        positionArray[52] = 11867;
        positionArray[51] = 11861;
        positionArray[50] = 11847;
        positionArray[49] = 11831;
        positionArray[48] = 11798;
        positionArray[47] = 11781;
        positionArray[46] = 11604;
        positionArray[45] = 11589;
        positionArray[44] = 11536;
        positionArray[43] = 11358;
        positionArray[42] = 11340;
        positionArray[41] = 11339;
        positionArray[40] = 11324;
        positionArray[39] = 11303;
        positionArray[38] = 11097;
        positionArray[37] = 11077;
        positionArray[36] = 11067;
        positionArray[35] = 11055;
        positionArray[34] = 11052;
        positionArray[33] = 11045;
        positionArray[32] = 11041;
        positionArray[31] = 11038;
        positionArray[30] = 11024;
        positionArray[29] = 11020;
        positionArray[28] = 11019;
        positionArray[27] = 11018;
        positionArray[26] = 11014;
        positionArray[25] = 10838;
        positionArray[24] = 10832;
        positionArray[23] = 10815;
        positionArray[22] = 10800;
        positionArray[21] = 10790;
        positionArray[20] = 10780;
        positionArray[19] = 10764;
        positionArray[18] = 10587;
        positionArray[17] = 10544;
        positionArray[16] = 10533;
        positionArray[15] = 10519;
        positionArray[14] = 10331;
        positionArray[13] = 10329;
        positionArray[12] = 10328;
        positionArray[11] = 10322;
        positionArray[10] = 10315;
        positionArray[9] = 10309;
        positionArray[8] = 10307;
        positionArray[7] = 10296;
        positionArray[6] = 10281;
        positionArray[5] = 10274;
        positionArray[4] = 10270;
        positionArray[3] = 10262;
        positionArray[2] = 10260;
        positionArray[1] = 10256;
        positionArray[0] = 10254;
    }

    /**
     * 获取输入字符串的拼音。对于输入的符号和英文字母,原样返回。
     * <p>目前对一字多音的处理还欠缺,如”行业“的拼音会转为”xingye“。只能对GB2312字符集进行解析。
     * @param gb2312Str 输入字符串
     * @return
     */
    public static String getAlpha(String gb2312Str) {
        if (!StringUtils.hasText(gb2312Str)) {
            return null;
        }
        char[] singleGB2312Chars = gb2312Str.toCharArray();
        StringBuffer alphaBuffer = new StringBuffer();
        for (int i = 0; i < singleGB2312Chars.length; i++) {
            String alpha = getSpellByAscii(getCnAscii((singleGB2312Chars[i])));
            if(null == alpha) {
                alphaBuffer.append(singleGB2312Chars[i]);
            } else {
                alphaBuffer.append(alpha);
            }            
        }
        return alphaBuffer.toString();
    }

    /**
     * 获取给定字符串的拼音大写的首字母
     * @param gb2312Str
     * @return
     */
    public static String getCapitalAlpha(String gb2312Str) {
        if (!StringUtils.hasText(gb2312Str)) {
            return null;
        }
        char[] singleGB2312Chars = gb2312Str.toCharArray();
        StringBuffer alphaBuffer = new StringBuffer();
        for (int i = 0; i < singleGB2312Chars.length; i++) {
            String alpha = getSpellByAscii(getCnAscii((singleGB2312Chars[i])));
            if (null != alpha) {
                alphaBuffer.append(alpha.toUpperCase().charAt(0));
            }
        }
        return alphaBuffer.toString();
    }

    /**
     * 获得单个汉字的Ascii.
     * 
     * @param cn
     *            char 汉字字符
     * @return int 错误返回 0,否则返回ascii
     */
    private 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;
            return ascii;
        }
        return 0; // 错误
    }

    /**
     * 根据ASCII码找对应的拼音
     * 
     * @param ascii
     *            int 字符对应的ASCII
     * @return String 拼音
     */
    private static String getSpellByAscii(int ascii) {
        if (ascii > 0 && ascii < 160) { // 单字符--英文或半角字符
            return String.valueOf((char) ascii);
        }
        if (ascii < -20319 || ascii > -10247) { // 不知道的字符
            return null;
        }
        int key = Math.abs(ascii);
        int startIndex = positionSearch(key);
        if (0 == startIndex && positionArray[startIndex + 1] < key) {
            return null;
        }
        return alphaArray[positionArray[startIndex]];
    }

    /**
     * 折半法查找拼音位置
     * 
     * @param key
     *            汉字ascii码绝对值
     * @return 对应的拼音位置
     */
    private static int positionSearch(int key) {
        int low = 1;
        int high = positionArray.length;
        int mid = (low + high) / 2;
        while (low < high) {
            if (key > positionArray[mid] && key < positionArray[mid + 1]) {
                return mid + 1;
            } else if (key <= positionArray[mid] && key > positionArray[mid - 1]) {
                return mid;
            } else if (key < positionArray[mid]) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
            mid = (low + high) / 2;
        }
        return mid;
    }
}

分享到:
评论
1 楼 xiaojing4037429 2013-02-28  
GB2312二级字库不是根据拼音弄的吧?

相关推荐

    delphi 开发经验技巧宝典源码

    0228 如何获取汉字拼音简码 151 0229 根据用户输入需求自动调整输入法 152 0230 根据生日自动计算年龄 153 0231 实现找零功能 153 0232 设计带记忆的数据录入窗口 154 0233 在窗体关闭时提示有未保存的...

    delphi 开发经验技巧宝典源码06

    0228 如何获取汉字拼音简码 151 0229 根据用户输入需求自动调整输入法 152 0230 根据生日自动计算年龄 153 0231 实现找零功能 153 0232 设计带记忆的数据录入窗口 154 0233 在窗体关闭时提示有未保存的...

    Delphi开发范例宝典目录

    实例015 类QQ的程序界面 18 实例016 类似Windows XP的程序界面 20 实例017 以图形按钮显示的界面 21 实例018 以树型显示的程序界面 23 实例019 以XPManifest组件显示界面 24 实例020 动态按钮的窗体界面...

    明日科技C#开发入门及项目实战

    实例044 汉字与区位码的转换 第5章 数组和集合 实例045 在数组中添加一个元素 实例046 在数组中添加一个数组 实例047 计算两个矩形矩阵的乘积 实例048 获取多维数组的行数与列数 实例049 使用快速排序法对一维数组...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例044 汉字与区位码的转换 69 第5章 数组和集合 71 实例045 在数组中添加一个元素 72 实例046 在数组中添加一个数组 73 实例047 计算两个矩形矩阵的乘积 75 实例048 获取多维数组的行数与列数 78 实例049 使用快速...

    会计理论考试题

    26.在Windows98中,如果要输入GB2312-80规定以外的汉字,应当____C____。 A、从Windows98的CD盘上安装GBK汉字输入法 B、从软件厂商购买GBK汉字输入法 C、选择全拼输入法来输入汉字 D、在控制面板中选“输入法”,...

Global site tag (gtag.js) - Google Analytics