zoukankan      html  css  js  c++  java
  • 模仿九宫格拼音输入法,根据输入的数字键,形成对应的汉字拼音

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

      

    转自:http://www.oschina.net/code/snippet_242764_50449

  • 相关阅读:
    【Javascript】JS单例模式的简单实现
    【Javascript】Javascript中如何判断变量是数组类型
    买卖股票的最佳时机 II
    只出现一次的数字
    删除排序数组中的重复项
    两数之和
    Android系统中Fastboot和Recovery所扮演的角色。
    虚函数、纯虚函数、抽象类、接口 (Java_C++_C#)
    关于cmd中执行命令路径包含空格的解决办法
    Windows API 编程学习记录<三>
  • 原文地址:https://www.cnblogs.com/spring87/p/4770441.html
Copyright © 2011-2022 走看看