package com.zte.my.study.temp;
/**
* @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等进驻山城"));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
javastudy.zip (83个子文件)
my
study
fruit
Node.class 414B
Box.java 743B
Client$AddThread.class 2KB
Box.class 1KB
List2.class 2KB
Client.class 1KB
Pear.class 424B
Fruit.java 199B
List2.java 1KB
Apple.class 427B
Apple.java 171B
List.java 3KB
Pear.java 169B
Client.java 2KB
Node2.class 417B
Client$DelThread.class 2KB
Fruit.class 700B
List.class 3KB
DynamicProxy
ConnectionHandler.class 2KB
DBConnectionPool.java 1KB
ConnectionPool.java 211B
ConnectionPool.class 244B
DBConnectionPool.class 2KB
ConnectionHandler.java 885B
arithmetic
ThirdNarcissusNum.class 847B
ThirdNarcissusNum.java 354B
SecondPrimeNumber.java 444B
SecondPrimeNumber.class 1KB
temp
FileReverse.class 3KB
Syn$Consumer.class 2KB
IceCream.java 1KB
ThreadTest$AddThread.class 1KB
SweetShop.class 1KB
Cookie.class 511B
Test1.class 1015B
BigDecimal.java 439B
Syn.class 2KB
TestArray.class 1KB
TreeSetTest.class 1KB
Test.class 872B
SweetShop.java 665B
Syn$Producer.class 2KB
ThreadTest$DelThread.class 1KB
PinyinConv.class 3KB
TestChineseCode.java 990B
TestArray.java 806B
TreeNode.class 1KB
TestChineseCode.class 1KB
Test.java 345B
OutOfMemory.class 1KB
TestTree.class 767B
Candy.class 508B
TreeNode.java 1KB
Test1.java 932B
BigDecimal.class 950B
TestTree.java 447B
ObjectSizeInMemory.class 2KB
Person.java 2KB
IceCream.class 1KB
GCD.java 562B
ReadMaxLenghtLetterFromString.class 3KB
TreeSetTest.java 2KB
OutOfMemory.java 642B
Syn.java 3KB
ReadMaxLenghtLetterFromString.java 1KB
Gum.class 502B
ObjectSizeInMemory.java 993B
ThreadTest.class 1KB
ThreadTest.java 2KB
PinyinConv.java 4KB
Weeble.class 307B
Student.class 1KB
FileReverse.java 2KB
Person.class 3KB
GCD.class 840B
ejb
HelloBean.class 1KB
Hello.java 226B
HelloHome.class 556B
HelloHome.java 192B
HelloBean.java 1017B
HelloClient.class 2KB
Hello.class 525B
HelloClient.java 1KB
共 83 条
- 1
资源评论
- 季末小邪2019-02-20不错不错 正好是我需要的 值得学习
- millmanxh2014-11-27太有用处了,下了这个资源高兴了几天没睡觉
balasubramaniam
- 粉丝: 3
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功