示例代碼如下:
公共類FirstLetterUtils {
//簡體中文的編碼範圍是從B0A1(45217)到F7FE(63486)。
private static int BEGIN = 45217;
私有靜態int END = 63486
//根據首字母,此表是GB2312中的第壹個漢字,也就是說“啊”是代表首字母a的第壹個漢字。
// i,u,v不做聲母,自定義規則沿用前面的字母。
private static char[]chartable = { ' Ah ',' Ba ',' Wipe ',' Take ',' Moth ',' Hair ',' Ga ',' Ha ',' Strike ',' Ka ',' La ',' Mom ',' Take '。
//二十六個字母間隔對應二十七個端點。
// GB2312碼漢字間隔十進制表示
私有靜態int[]table = new int[27];
//對應的初始區間表
private static char[]initial table = { ' a '、' b '、' c '、' d '、' e '、' f '、' g '、' h '、' j '、' k '、' l '、' m '、' n '、' o '、' p '、' q '、' r '、' s '、' t '、' t '、' w '、' x '、' y '、' z ',};
//初始化
靜態{
for(int I = 0;我& lt26;i++) {
table[I]= GB value(chartable[I]);//獲取GB2312代碼的首字母區間端點表,十進制。
}
表[26] =結束;//間隔表結束
}
// -公共方法區域。
//根據壹個包含漢字的字符串返回壹個漢語拼音首字母的字符串,最重要的方法是:壹次讀取、判斷、輸出壹個字符。
公共靜態字符串cn2py(String SourceStr) {
字符串結果= " ";
int StrLength = sourcestr . length();
int I;
嘗試{
for(I = 0;我& ltStrLengthi++) {
result+= char 2 initial(sourcestr . charat(I));
}
} catch(異常e) {
結果= " ";
e . printstacktrace();
}
返回結果;
}
// -私有方法區域。
/**
*輸入字符得到他的首字母,英文字母返回對應的大寫字母,其他非簡體中文字符返回' 0' *
*/
私有靜態char Char2Initial(char ch) {
//英文字母的處理:小寫字母轉換成大寫,大寫字母直接返回。
if(ch & gt;= ' a ' & amp& ampch & lt= 'z') {
return(char)(ch-' A '+' A ');
}
if(ch & gt;= ' A ' & amp& ampch & lt= 'Z') {
返回ch;
}
//非英文字母的處理:轉換成首字母,然後判斷是否在碼表內。
//如果沒有,直接返回。
//如果是,在碼表中判斷。
int GB = GB value(ch);//漢字轉換首字母
如果((gb & ltBEGIN)| |(GB & gt;END))//碼表間隔前,直接返回。
{
返回ch;
}
int I;
for(I = 0;我& lt26;I++) {//判斷匹配的碼表區間,匹配就斷,區間判斷為“[,)”。
如果((gb & gt=表[I])& amp;& amp(gb & lt表[i + 1])) {
打破;
}
}
If (gb == END) {//完成GB2312的區間最右邊部分。
i = 25
}
返回initial table[I];//在碼表區間,返回第壹個字母。
}
/**
*取出漢字的編碼cn漢字
*/
private static int GB value(Charch){//將壹個中文字符(GB2312)轉換為十進制表示。
String str = new String();
str+= ch;
嘗試{
byte[]bytes = str . getbytes(" GB 2312 ");
if(bytes . length & lt;2) {
返回0;
}
return(字節[0]& lt;& lt8 & amp0xff00) +(字節[1]& amp;0x ff);
} catch(異常e) {
返回0;
}
}
公共靜態void main(String[] args)引發異常{
System.out.println(cn2py("這是壹個得到其首字母的類"));
}
}