JAVA 中文转拼音
发布时间:2020-05-24 22:04:09 所属栏目:Java 来源:互联网
导读:JAVA 中文转拼音
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 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));
}
}
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
