加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JAVA 中文转拼音

发布时间:2020-12-15 03:18:46 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.io.UnsupportedEncodingException;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.Set;import org.apache.

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;

import org.apache.log4j.Logger;

/**
 * 将中文转化为拼音
 *
 * @author admin
 *
 */
public class Cn2Spell {

    private static Logger log = Logger.getLogger("UtilLog");
    private static LinkedHashMap<String,Integer> spellMap = null;
    private static LinkedHashMap<String,Integer> otherSpellMap = null;

    private Cn2Spell() {
    }

    static {
        if (spellMap == null) {
            spellMap = new LinkedHashMap<String,Integer>(400);
        }

        if (otherSpellMap == null) {
            otherSpellMap = new LinkedHashMap<String,Integer>(100);
        }

        initialize();

        log.info("Chinese transfer Spell Done.");
    }

    private static void spellPut(String spell,int ascii) {
        spellMap.put(spell,new Integer(ascii));
    }

    private static void otherSpellPut(String spell,int ascii) {
        otherSpellMap.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);

        otherSpellPut("a-1",-7996);
        otherSpellPut("a-2",-4167);
        otherSpellPut("a-3",-31359);
        otherSpellPut("ai-1",-5054);
        otherSpellPut("bo-1",-8029);
        otherSpellPut("rui-1",-4445);
        otherSpellPut("yan-1",-5145);
    }

    /**
     * 获得单个汉字的Ascii.
     *
     * @param cn
     *            - char 汉字字符
     * @return int 错误返回 0,否则返回ascii
     */
    public static int getCnAscii(char cn) {
        byte[] bytes = null;

        try {
            bytes = (String.valueOf(cn)).getBytes("GBK");
        } catch (UnsupportedEncodingException ex) {
        }

        if (bytes == null || bytes.length > 2 || bytes.length <= 0) { // 错误
            log.info("转换时发生错误!!");

            return 0;
        }

        if (bytes.length == 1) { // 英文字符
            log.info("/"" + cn + "/"是英文字符,其 ASCII 为:" + bytes[0]);

            return bytes[0];
        }

        if (bytes.length == 2) { // 中文字符
            int hightByte = 256 + bytes[0];
            int lowByte = 256 + bytes[1];

            int ascii = (256 * hightByte + lowByte) - 256 * 256;

            log.info("/"" + cn + "/"的 ASCII 为 :  " + ascii);

            return ascii;
        }

        log.info("转换时发生错误!!");

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

        if (ascii < -20319 || ascii > -10247) { // 其他的字符
            Iterator<String> oit = otherSpellMap.keySet().iterator();

            while (oit.hasNext()) {
                String otherSpell = (String) oit.next();
                Object otherValObj = otherSpellMap.get(otherSpell);

                if (otherValObj instanceof Integer) {
                    if (ascii == ((Integer) otherValObj).intValue()) {
                        log.info("此时的拼音为:" + otherSpell);

                        return otherSpell.split("-")[0];
                    }
                }
            }

            log.info("无法识别,可手动添加。/n在添加之前强行将此字符拼音定义为z");
            return "z";
        }

        Set<String> keySet = spellMap.keySet();
        Iterator<String> 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) { // 区间找到
                    log.info("此时的拼音为:" + spell + "/n其对应的区间起始数字为:" + asciiRang0
                            + "/n上一个拼音为:" + spell0 + "/n即字符对应拼音应为:" + spell0);

                    return (spell0 == null) ? spell : spell0;
                } else {
                    spell0 = spell;
                    asciiRang0 = asciiRang;

                    // log.info("此时的拼音为:" + spell + "/n其对应的区间起始数字为:" +
                    // asciiRang0);
                }
            }
        }

        return null;

    }

    /**
     * 判断是否是字母
     *
     * @param ascii
     *            - int 字符对应的ASCII
     * @return boolean 返回是否是字母的结果
     */
    @SuppressWarnings("unused")
    private static boolean isAlphabet(int ascii) {
        if (ascii > 0 && ascii < 160) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 返回字符串的全拼,是汉字转化为全拼,其它字符不进行转换
     *
     * @param cnStr
     *            - String 字符串
     * @return String 转换成全拼后的字符串
     */
    public static String getFullSpell(String cnStr) {
        if (null == cnStr || "".equals(cnStr.trim())) {
            return cnStr;
        }

        // boolean isChinese = false;

        char[] chars = cnStr.toCharArray();
        StringBuffer retuBuf = new StringBuffer();
        StringBuffer resultBuf = 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 {
                    log.info(chars[i] + "的拼音为:" + spell);

                    retuBuf.append(spell);
                }

                // if (!isAlphabet(ascii)) {
                // isChinese = true;
                // // retuBuf.append(" ");
                // }
            } // end of if ascii <= -20400
        }

        // if (isChinese) {
        // // resultBuf.append(cnStr);
        // // resultBuf.append("");
        // resultBuf.append(retuBuf.toString());
        // } else {
        // resultBuf.append(retuBuf.toString());
        // }

        resultBuf.append(retuBuf.toString());

        return resultBuf.toString();
    }

    public static String getFirstSpell(String cnStr) {
        return null;
    }

    public static void main(String[] args) {
        String str = null;

        try {
            str = new String("你好呀".getBytes(),"UTF-8");
        } catch (UnsupportedEncodingException ex) {
        }
        System.out.println("/"" + str + "/"的拼音为:" + Cn2Spell.getFullSpell(str));
    }

}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读