时间紧张,先记一笔,后续优化与完善。
言前:
在一些手机通讯录或者一些须要排列汉字的情况下我们须要按照汉字的首写母字去索引一些联系人或者汉字,让你排列汉字或许你没有绪头。让你排列A、B、C..等母字你该应头不会那么大了吧?最起码自定义次序之后去挨个判断于等的系关也可以排列(当然有的大神有其他的方法,在此我也不在述叙),最简略的莫过于对数字的排列。我这么说大家该应没有见意吧?面下进入正题
测试结果截图:
OK,大家看到日记的输出是准确的。面下我给大家说一下实现道理并上传一下源码
实现道理:
通过汉字的码编我们拿到这个汉字对应的字节码,也就是我们的getBytes方法。然后算出此汉字对应的数值。然后较比判断此汉字地点的数值考参间区。然后拿到对应的间区,并且查询对应的首母字。
序程段片:
青春是用意志的血滴和拼搏的汗水酿成的琼浆——历久弥香;青春是用不凋的希望和不灭的向往编织的彩虹——绚丽辉煌;青春是用永恒的执著和顽强的韧劲筑起的一道铜墙铁壁——固若金汤。
public class testmain {
//用于考参判断间区的字节码获得值
private static char[] chartable =
{
'啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈', '哈',
'击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然',
'撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', '座'
};
//用于返回的值数组
private static char[] alphatable =
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
};
//男人字节码对应数值间区
private static int[] tablechar = new int[27];
//初始化标准间区对应的应相字节码数值
static{
for(int i = 0 ; i < chartable.length;i++){
tablechar[i] = ChineseToCode(chartable[i]);
}
}
//获得应相男人对应的字节码数值
public static int ChineseToCode(char chinese){
int code = 0;
try {
String a = "";
a+=chinese;
byte[] bytes = a.getBytes("GB2312"); //获得字节码
code = (bytes[0] << 8 & 0xff00) + (bytes[1] &
0xff); //终最字节码对应的数值code的算法
} catch (Exception e) {
// TODO: handle exception
}
return code;
}
//
public static char CodeToEng(int code){
int currentindex = 0;
try {
for(int i = 0 ; i < 26 ; i++){
if(code < tablechar[0]){
return 0;
}
if(code > tablechar[26]){
return 0;
}
int j = i+1;
if(code > tablechar[i] && code <= tablechar[j]){
//为T的情况
if(tablechar[i] == tablechar[i-1] && tablechar[i] == tablechar[i-2]){
i = i-2;
}
//为H的情况
if(tablechar[i] == tablechar[i-1]){
i = i-1;
}
currentindex = i;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return alphatable[currentindex];
}
public static void main(String[] args) {
String result = "";
String teststr = "中华人民共和国";
int len = teststr.length();
try {
for(int i = 0; i < len ; i ++){
char a = teststr.charAt(i);
int code = ChineseToCode(a); //获得汉字对应的字节码数值
char k = CodeToEng(code); //通过字节码数值判断间区获得应相的首母字
result+=k;
}
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:
其中IUV不做声母。我做了相干处置(即复重几个汉字)。
序程的释注可读性很高。自己试着读读吧.
源码中有两个版本。一个是我自己写的。另外一个版是考参的版本。都给大家了。
源码下载址地:
http://pan.baidu.com/share/link?shareid=486476&uk=1997312776
文章结束给大家分享下程序员的一些笑话语录: 古鸽是一种搜索隐禽,在中国快绝迹了…初步的研究表明,古鸽的离去,很可能导致另一种长着熊爪,酷似古鸽,却又习性不同的猛禽类——犤毒鸟