汉字和拼音转换程序java

从网上找的,根据拼音和汉字内码的对照表实现的

原作者的 Googlecode地址:

源码地址: http://code.google.com/p/elainectpy/

/**
 * @author lixin.wang GB2312 encode
 */
public class ChineseUtilHelp {

	private static String[] pyin = { "zuo", "zun", "zui", "zuan", "zu", "zou", "zong", "zi", "zhuo", "zhun", "zhui", "zhuang", "zhuan", "zhuai", "zhua", "zhu", "zhou", "zhong",
			"zhi", "zheng", "zhen", "zhe", "zhao", "zhang", "zhan", "zhai", "zha", "zeng", "zen", "zei", "ze", "zao", "zang", "zan", "zai", "za", "yun", "yue", "yuan", "yu",
			"you", "yong", "yo", "ying", "yin", "yi", "ye", "yao", "yang", "yan", "ya", "xun", "xue", "xuan", "xu", "xiu", "xiong", "xing", "xin", "xie", "xiao", "xiang", "xian",
			"xia", "xi", "wu", "wo", "weng", "wen", "wei", "wang", "wan", "wai", "wa", "tuo", "tun", "tui", "tuan", "tu", "tou", "tong", "ting", "tie", "tiao", "tian", "ti",
			"teng", "te", "tao", "tang", "tan", "tai", "ta", "suo", "sun", "sui", "suan", "su", "sou", "song", "si", "shuo", "shun", "shui", "shuang", "shuan", "shuai", "shua",
			"shu", "shou", "shi", "sheng", "shen", "she", "shao", "shang", "shan", "shai", "sha", "seng", "sen", "se", "sao", "sang", "san", "sai", "sa", "ruo", "run", "rui",
			"ruan", "ru", "rou", "rong", "ri", "reng", "ren", "re", "rao", "rang", "ran", "qun", "que", "quan", "qu", "qiu", "qiong", "qing", "qin", "qie", "qiao", "qiang",
			"qian", "qia", "qi", "pu", "po", "ping", "pin", "pie", "piao", "pian", "pi", "peng", "pen", "pei", "pao", "pang", "pan", "pai", "pa", "ou", "o", "nuo", "nue", "nuan",
			"nv", "nu", "nong", "niu", "ning", "nin", "nie", "niao", "niang", "nian", "ni", "neng", "nen", "nei", "ne", "nao", "nang", "nan", "nai", "na", "mu", "mou", "mo",
			"miu", "ming", "min", "mie", "miao", "mian", "mi", "meng", "men", "mei", "me", "mao", "mang", "man", "mai", "ma", "luo", "lun", "lue", "luan", "lv", "lu", "lou",
			"long", "liu", "ling", "lin", "lie", "liao", "liang", "lian", "lia", "li", "leng", "lei", "le", "lao", "lang", "lan", "lai", "la", "kuo", "kun", "kui", "kuang",
			"kuan", "kuai", "kua", "ku", "kou", "kong", "keng", "ken", "ke", "kao", "kang", "kan", "kai", "ka", "jun", "jue", "juan", "ju", "jiu", "jiong", "jing", "jin", "jie",
			"jiao", "jiang", "jian", "jia", "ji", "huo", "hun", "hui", "huang", "huan", "huai", "hua", "hu", "hou", "hong", "heng", "hen", "hei", "he", "hao", "hang", "han",
			"hai", "ha", "guo", "gun", "gui", "guang", "guan", "guai", "gua", "gu", "gou", "gong", "geng", "gen", "gei", "ge", "gao", "gang", "gan", "gai", "ga", "fu", "fou",
			"fo", "feng", "fen", "fei", "fang", "fan", "fa", "er", "en", "e", "duo", "dun", "dui", "duan", "du", "dou", "dong", "diu", "ding", "die", "diao", "dian", "di", "deng",
			"de", "dao", "dang", "dan", "dai", "da", "cuo", "cun", "cui", "cuan", "cu", "cou", "cong", "ci", "chuo", "chun", "chui", "chuang", "chuan", "chuai", "chu", "chou",
			"chong", "chi", "cheng", "chen", "che", "chao", "chang", "chan", "chai", "cha", "ceng", "ce", "cao", "cang", "can", "cai", "ca", "bu", "bo", "bing", "bin", "bie",
			"biao", "bian", "bi", "beng", "ben", "bei", "bao", "bang", "ban", "bai", "ba", "ao", "ang", "an", "ai", "a" };
	private static int[] code = { 5157, 5155, 5151, 5149, 5141, 5137, 5130, 5115, 5104, 5102, 5096, 5089, 5083, 5082, 5080, 5054, 5040, 5029, 4986, 4971, 4955, 4945, 4935, 4920,
			4903, 4897, 4883, 4879, 4878, 4877, 4873, 4859, 4856, 4852, 4845, 4842, 4830, 4820, 4800, 4756, 4735, 4720, 4719, 4701, 4685, 4632, 4617, 4602, 4585, 4552, 4536, 4522,
			4516, 4506, 4487, 4478, 4471, 4456, 4446, 4425, 4407, 4387, 4361, 4348, 4313, 4284, 4275, 4272, 4262, 4229, 4219, 4202, 4200, 4193, 4182, 4179, 4173, 4171, 4160, 4156,
			4143, 4133, 4130, 4125, 4117, 4102, 4098, 4097, 4086, 4073, 4055, 4046, 4037, 4029, 4026, 4015, 4012, 3999, 3996, 3988, 3972, 3968, 3964, 3960, 3957, 3955, 3951, 3949,
			3916, 3906, 3859, 3848, 3832, 3820, 3809, 3801, 3785, 3783, 3774, 3773, 3772, 3769, 3765, 3762, 3758, 3754, 3751, 3749, 3747, 3744, 3742, 3732, 3729, 3719, 3718, 3716,
			3706, 3704, 3701, 3696, 3692, 3690, 3682, 3671, 3658, 3650, 3648, 3635, 3624, 3619, 3604, 3596, 3574, 3571, 3535, 3520, 3511, 3502, 3497, 3495, 3491, 3487, 3470, 3456,
			3454, 3445, 3438, 3433, 3425, 3419, 3413, 3406, 3405, 3401, 3399, 3398, 3397, 3394, 3390, 3386, 3380, 3379, 3372, 3370, 3368, 3361, 3350, 3349, 3348, 3346, 3345, 3340,
			3339, 3336, 3331, 3324, 3309, 3306, 3289, 3288, 3282, 3276, 3274, 3266, 3257, 3243, 3235, 3232, 3216, 3215, 3203, 3197, 3188, 3182, 3173, 3161, 3154, 3152, 3146, 3132,
			3112, 3106, 3097, 3086, 3072, 3060, 3055, 3042, 3031, 3017, 3016, 2982, 2979, 2968, 2966, 2957, 2950, 2935, 2932, 2925, 2921, 2917, 2906, 2898, 2896, 2892, 2887, 2880,
			2876, 2872, 2870, 2866, 2851, 2847, 2840, 2834, 2829, 2825, 2814, 2804, 2797, 2772, 2755, 2753, 2728, 2708, 2681, 2653, 2640, 2600, 2583, 2530, 2520, 2514, 2493, 2479,
			2465, 2460, 2451, 2433, 2426, 2417, 2412, 2408, 2406, 2388, 2379, 2376, 2357, 2350, 2349, 2343, 2340, 2324, 2321, 2310, 2307, 2301, 2283, 2274, 2259, 2252, 2250, 2249,
			2232, 2222, 2213, 2202, 2196, 2194, 2149, 2148, 2147, 2132, 2117, 2105, 2094, 2077, 2069, 2061, 2060, 2047, 2035, 2026, 2022, 2016, 2001, 1994, 1984, 1983, 1974, 1967,
			1958, 1942, 1923, 1916, 1913, 1901, 1896, 1881, 1869, 1863, 1857, 1854, 1846, 1843, 1839, 1838, 1832, 1820, 1818, 1811, 1806, 1800, 1793, 1792, 1776, 1764, 1759, 1743,
			1728, 1718, 1712, 1703, 1690, 1680, 1677, 1666, 1664, 1659, 1654, 1649, 1642, 1631, 1630, 1621, 1600, 1591, 1585, 1581, 1577, 1565, 1541, 1535, 1531, 1516, 1499, 1487,
			1472, 1464, 1446, 1437, 1434, 1425, 1412, 1410 };

	public String getPying(String word) {
		if (word == null || word.trim().equals("")) {
			return word;
		}
		char[] chars = word.toCharArray();
		StringBuffer sb = new StringBuffer();
		for (int i = 0, Len = chars.length; i < Len; i++) {
			sb.append(getPinyin(chars[i]));
		}
		return sb.toString();
	}

	public String getPinyin(char word) {
		int gbcode = getGB2312code(word);
		if (gbcode == 0) {
			return String.valueOf(word);
		} else {
			String py = getPyinCode(gbcode);
			return py;
		}
	}

	private int getGB2312code(char ch) {

		byte[] bytes = null;
		try {
			bytes = Character.toString(ch).getBytes("GB2312");
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (bytes == null || bytes.length > 2 || bytes.length <= 0) {
			return -1;
		}
		if (bytes.length == 1) {
			return bytes[0];
		} else {
			int hightByte = (bytes[0] & 0xff) - 0xa1;// get the gb2312 code in
														// gb2312 encoding.
														// decrease 0xa1
			int lowByte = (bytes[1] & 0xff) - 0xa1; //
			int gb2312 = hightByte * 94 + lowByte;//
			return gb2312;
		}
	}

	private String getPyinCode(int gb2312code) {
		if (gb2312code > 0 && gb2312code < 160) {
			return String.valueOf((char) gb2312code);
		}
		if (gb2312code < 1410 || gb2312code > 5325) {
			return "?";
		}
		int i = 0;
		for (i = 0; i < code.length; i++) {
			if (gb2312code >= code[i]) {
				break;
			}

		}
		return pyin[i];
	}
}

猜你喜欢

转载自eric-gcm.iteye.com/blog/1460701
今日推荐