为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

提取汉字拼音首字母

2010-08-17 11页 doc 101KB 61阅读

用户头像

is_731882

暂无简介

举报
提取汉字拼音首字母public class ChineseLetter { // 国标码和区位码转换常量 private static final int GB_SP_DIFF = 160; // 存放国标一级汉字不同读音的起始区位码 private static final int[] secPosValueList = { 1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 347...
提取汉字拼音首字母
public class ChineseLetter { // 国标码和区位码转换常量 private static final int GB_SP_DIFF = 160; // 存放国标一级汉字不同读音的起始区位码 private static final int[] secPosValueList = { 1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249, 5600 }; // 存放国标一级汉字不同读音的起始区位码对应读音 private static final char[] firstLetter = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'w', 'x', 'y', 'z' }; // 获取一个字符串的拼音码 public static String getFirstLetter(String oriStr) { String str = oriStr.toLowerCase(); StringBuffer buffer = new StringBuffer(); char ch; char[] temp; for (int i = 0; i < str.length(); i++) { // 依次处理str中每个字符 ch = str.charAt(i); temp = new char[] { ch }; byte[] uniCode = new String(temp).getBytes(); if (uniCode[0] < 128 && uniCode[0] > 0) { // 非汉字 buffer.append(temp); } else { buffer.append(convert(uniCode)); } } return buffer.toString(); } // 获取一个汉字的首字母 public static char convert(byte[] bytes) { char result = '-'; int secPosValue = 0; int i; for (i = 0; i < bytes.length; i++) { bytes[i] -= GB_SP_DIFF; } secPosValue = bytes[0] * 100 + bytes[1]; for (i = 0; i < 23; i++) { if (secPosValue >= secPosValueList[i] && secPosValue < secPosValueList[i + 1]) { result = firstLetter[i]; break; } } return result; } public static void main(String[] args) { System.out.println(ChineseLetter.getFirstLetter("我是中国人")); } } ------------------------------------------------------------------------------------------------------------------ 取汉字拼音首字母 package test; public class WordToSpell { // 国标码和区位码转换常量 private static final int GB_SP_DIFF = 160; // 存放国标一级汉字不同读音的起始区位码 private static final int[] secPosvalueList = { 1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249, 5600}; // 存放国标一级汉字不同读音的起始区位码对应读音 private static final char[] firstLetter = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'w', 'x', 'y', 'z'}; // 获取一个字符串的拼音码 public static String getFirstLetter(String oriStr) { String str = oriStr.toLowerCase(); StringBuffer buffer = new StringBuffer(); char ch; char[] temp; for (int i = 0; i < str.length(); i++) { //依次处理str中每个字符 ch = str.charAt(i); temp = new char[] { ch}; byte[] uniCode = new String(temp).getBytes(); if (uniCode[0] < 128 && uniCode[0] > 0) { // 非汉字 buffer.append(temp); } else { buffer.append(convert(uniCode)); } } return buffer.toString(); } /** 获取一个汉字的拼音首字母。 * GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码 * 例如汉字“你”的GB码是0xC4/0xE3,分别减去0xA0(160)就是0x24/0x43 * 0x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘n’ */ private static char convert(byte[] bytes) { char result = '-'; int secPosvalue = 0; int i; for (i = 0; i < bytes.length; i++) { bytes[i] -= GB_SP_DIFF; } secPosvalue = bytes[0] * 100 + bytes[1]; for (i = 0; i < 23; i++) { if (secPosvalue >= secPosvalueList[i] && secPosvalue < secPosvalueList[i + 1]) { result = firstLetter[i]; break; } } return result; } public static String getBarcode(String isbn) { String barcode = "978"; int a = 0, b = 0; int m = 0; int c = 0; //偶数和为a,计数和为b //获取中间9位数字 isbn = isbn.substring(isbn.indexOf("-") - 1, isbn.lastIndexOf("-")); isbn = isbn.replaceAll("-", ""); //去掉第一个- isbn = isbn.replaceAll("-", ""); //去掉第二个- barcode += isbn; for (int i = 0; i < barcode.length(); i++) { if (i % 2 == 0) { b += Integer.parseInt(barcode.substring(m, m + 1)); m++; } else { a += Integer.parseInt(barcode.substring(m, m + 1)); m++; } } a = a * 3; //偶数和乘3 c = a + b; //a+b int last = 0; String str = c + ""; //获取c的字符串 last = 10 - Integer.parseInt(str.substring(str.length() - 1, str.length())); if (last == 10) { last = 0; } barcode = barcode + last; return barcode; } public static void main(String[] arg){ System.out.println(getFirstLetter("汉字")); } } ----------------------------------------------------------------------------------------------------------- 提取汉字拼音首字母(Java版) 收藏 此文于2010-03-02被推荐到CSDN首页 如何被推荐? package info.gnuhpc; /** * @author gnuhpc email: warmbupt@gmail.com blog: http://gnuhpc.info * @date 2010-1-22 * @bugs 不支持多音字处理 */ public class PinyinConv { // 简体中文的编码范围从B0A1(45217)一直到F7FE(63486) private static int BEGIN = 45217; private static int END = 63486; // 按照声母表示,这个表是在GB2312中的出现的第一个汉字,也就是说“啊”是代表首字母a的第一个汉字。 // i, u, v都不做声母, 自定规则跟随前面的字母 private static char[] chartable = { '啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈', '哈', '击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然', '撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', }; // 二十六个字母区间对应二十七个端点 // GB2312码汉字区间十进制表示 private static int[] table = new int[27]; // 对应首字母区间表 private static char[] initialtable = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 't', 't', 'w', 'x', 'y', 'z', }; // 初始化 static { for (int i = 0; i < 26; i++) { table[i] = gbValue(chartable[i]);// 得到GB2312码的首字母区间端点表,十进制。 } table[26] = END;// 区间表结尾 } // ------------------------public区------------------------ /** * 根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串 最重要的一个方法,思路如下:一个个字符读入、判断、输出 */ public static String cn2py(String SourceStr) { String Result = ""; int StrLength = SourceStr.length(); int i; try { for (i = 0; i < StrLength; i++) { Result += Char2Initial(SourceStr.charAt(i)); } } catch (Exception e) { Result = ""; } return Result; } // ------------------------private方法区------------------------ /** * 输入字符,得到他的声母,英文字母返回对应的大写字母,其他非简体汉字返回 '0' * */ private static char Char2Initial(char ch) { // 对英文字母的处理:小写字母转换为大写,大写的直接返回 if (ch >= 'a' && ch <= 'z') return (char) (ch - 'a' + 'A'); if (ch >= 'A' && ch <= 'Z') return ch; // 对非英文字母的处理:转化为首字母,然后判断是否在码表范围内, // 若不是,则直接返回。 // 若是,则在码表内的进行判断。 int gb = gbValue(ch);// 汉字转换首字母 if ((gb < BEGIN) || (gb > END))// 在码表区间之前,直接返回 return ch; int i; for (i = 0; i < 26; i++) {// 判断匹配码表区间,匹配到就break,判断区间形如“[,)” if ((gb >= table[i]) && (gb < table[i+1])) break; } if (gb==END) {//补上GB2312区间最右端 i=25; } return initialtable[i]; // 在码表区间中,返回首字母 } /** * 取出汉字的编码 cn 汉字 */ private static int gbValue(char ch) {// 将一个汉字(GB2312)转换为十进制表示。 String str = new String(); str += ch; try { byte[] bytes = str.getBytes("GB2312"); if (bytes.length < 2) return 0; return (bytes[0] << 8 & 0xff00) + (bytes[1] & 0xff); } catch (Exception e) { return 0; } } public static void main(String[] args) throws Exception { System.out.println(cn2py("重庆重视发展IT行业,大多数外企,如,IBM等进驻山城")); } } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gnuhpc/archive/2010/03/02/5338020.aspx ---------------------------------------------------------------------------------------------------------- 下面的例子测试能进行ascii<--->中文之间互转 import sun.io.CharToByteConverter; import sun.io.ByteToCharConverter; /**不能显示中文的问题*/ @SuppressWarnings("deprecation") public class UnicodeToAscii { public UnicodeToAscii() { super(); } /** * 将Ascii转换成中文字符串 */ public static String AsciiToChineseString(char[] s) { byte[] dest = new byte[s.length]; for (int i = 0; i < s.length; i++) dest[i] = (byte) (s[i] & 0xFF); try { ByteToCharConverter toChar = ByteToCharConverter .getConverter("gb2312"); return new String(toChar.convertAll(dest)); } catch (Exception e) { System.out.println(e); return ""; } } public static String AsciiToChineseString(String s) { if (s == null) return s; char[] orig = s.toCharArray(); byte[] dest = new byte[orig.length]; for (int i = 0; i < orig.length; i++) dest[i] = (byte) (orig[i] & 0xFF); try { ByteToCharConverter toChar = ByteToCharConverter .getConverter("gb2312"); return new String(toChar.convertAll(dest)); } catch (Exception e) { System.out.println(e); return s; } } /** * 将中文字符串转换成Ascii */ public static String ChineseStringToAscii(String s) { if (s == null) return s; try { CharToByteConverter toByte = CharToByteConverter .getConverter("gb2312"); byte[] orig = toByte.convertAll(s.toCharArray()); char[] dest = new char[orig.length]; for (int i = 0; i < orig.length; i++) dest[i] = (char) (orig[i] & 0xFF); return new String(dest); } catch (Exception e) { System.out.println(e); return s; } } /** * 中文转ascii * * 要进行转换的字符串 * 是否进行转换,一个开关控制 , true代表需要转换。 * 转换后的字符串 */ public static String ChineseStringToAscii(String s, boolean bl) { if (!bl) return s; else return ChineseStringToAscii(s); } /** * ascii转字符串 */ public static String AsciiToChineseString(char[] s, boolean bl) { if (!bl) return null; else return AsciiToChineseString(s); } public static String AsciiToChineseString(String s, boolean bl) { if (!bl) return s; else return AsciiToChineseString(s); } /** * 根据输入的源串(中文或中西文混合)返回其拼音首字母,以小写返回,如果首字符非拼音字母,则统一返回*号 * * @param str * 源串(中文或中西文混合) * @return 返回str的拼音首字母,以小写返回,如果首字符非拼音字母,则统一返回*号 */ public static String getFirstCharOfString(String str) { String firstChar = "*"; if (str == null || str.length() <= 0) return firstChar; try { byte firstCharBytes[] = new byte[2]; int gbcode; firstCharBytes[0] = str.getBytes("gb2312")[0]; gbcode = firstCharBytes[0] & 0x000000ff; if (str.length() > 1 || gbcode >= 0xb0) { firstCharBytes[1] = str.getBytes("gb2312")[1]; gbcode = (firstCharBytes[0] & 0x000000ff) * 0x100 + (firstCharBytes[1] & 0x000000ff); } if (gbcode >= 0xb0a1 && gbcode <= 0xb0c4) firstChar = "a"; else if (gbcode >= 0xb0c5 && gbcode <= 0xb2c0) firstChar = "b"; else if (gbcode >= 0xb2c1 && gbcode <= 0xb4ed) firstChar = "c"; else if (gbcode >= 0xb4ee && gbcode <= 0xb6e9) firstChar = "d"; else if (gbcode >= 0xb6ea && gbcode <= 0xb7a1) firstChar = "e"; else if (gbcode >= 0xb7a2 && gbcode <= 0xb8c0) firstChar = "f"; else if (gbcode >= 0xb8c1 && gbcode <= 0xb9fd) firstChar = "g"; else if (gbcode >= 0xb9fe && gbcode <= 0xbbf6) firstChar = "h"; else if (gbcode >= 0xbbf7 && gbcode <= 0xbfa5) firstChar = "j"; else if (gbcode >= 0xbfa6 && gbcode <= 0xc0ab) firstChar = "k"; else if (gbcode >= 0xc0ac && gbcode <= 0xc2e7) firstChar = "l"; else if (gbcode >= 0xc2e8 && gbcode <= 0xc4c2) firstChar = "m"; else if (gbcode >= 0xc4c3 && gbcode <= 0xc5b5) firstChar = "n"; else if (gbcode >= 0xc5b6 && gbcode <= 0xc5bd) firstChar = "o"; else if (gbcode >= 0xc5be && gbcode <= 0xc6d9) firstChar = "p"; else if (gbcode >= 0xc6da && gbcode <= 0xc8ba) firstChar = "q"; else if (gbcode >= 0xc8bb && gbcode <= 0xc8f5) firstChar = "r"; else if (gbcode >= 0xc8f6 && gbcode <= 0xcbf9) firstChar = "s"; else if (gbcode >= 0xcbfa && gbcode <= 0xcdd9) firstChar = "t"; else if (gbcode >= 0xcdda && gbcode <= 0xcef3) firstChar = "w"; else if (gbcode >= 0xcef4 && gbcode <= 0xd1b8) firstChar = "x"; else if (gbcode >= 0xd1b9 && gbcode <= 0xd4d0) firstChar = "y"; else if (gbcode >= 0xd4d1 && gbcode <= 0xd7f9) firstChar = "z"; else gbcode = firstCharBytes[0]; if (gbcode >= 'A' && gbcode <= 'Z') gbcode += 32; if (gbcode >= 'a' && gbcode <= 'z') firstChar = String.valueOf((char) gbcode); } catch (Exception e) { System.out.println("getFirstCharOfString Exception: " + e.getMessage()); } return firstChar; } }
/
本文档为【提取汉字拼音首字母】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索