java取出汉字字符串的拼音首字母

http://library.iteye.com/blog/163653

 

import java.lang.*;   
  
public class GB2Alpha {   
  
    //字母Z使用了两个标签,这里有27个值   
    //i, u, v都不做声母, 跟随前面的字母   
    private char[] chartable =   
            {   
                '啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈', '哈',   
                '击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然',   
                '撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', '座'  
            };   
  
    private 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 int[] table = new int[27];   
  
    //初始化   
    {   
        for (int i = 0; i < 27; ++i) {   
            table[i] = gbValue(chartable[i]);   
        }   
    }   
  
    public GB2Alpha() {   
  
    }   
  
    //主函数,输入字符,得到他的声母,   
    //英文字母返回对应的大写字母   
    //其他非简体汉字返回 '0'   
  
    public char Char2Alpha(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 < table[0])   
            return '0';   
  
  
        int i;   
        for (i = 0; i < 26; ++i) {   
            if (match(i, gb))   
                break;   
        }   
  
        if (i >= 26)   
            return '0';   
        else  
            return alphatable[i];   
    }   
  
    //根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串   
    public String String2Alpha(String SourceStr) {   
        String Result = "";   
        int StrLength = SourceStr.length();   
        int i;   
        try {   
            for (i = 0; i < StrLength; i++) {   
                Result += Char2Alpha(SourceStr.charAt(i));   
            }   
        } catch (Exception e) {   
            Result = "";   
        }   
        return Result;   
    }   
  
    private boolean match(int i, int gb) {   
        if (gb < table[i])   
            return false;   
  
        int j = i + 1;   
  
        //字母Z使用了两个标签   
        while (j < 26 && (table[j] == table[i]))   
            ++j;   
  
        if (j == 26)   
            return gb <= table[j];   
        else  
            return gb < table[j];   
  
    }   
  
    //取出汉字的编码   
    private int gbValue(char ch) {   
        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) {   
        com.mkrx.GB2Alpha obj1 = new com.mkrx.GB2Alpha();   
        System.out.println(obj1.String2Alpha("测试:中华人民共和国!"));   
        return;   
    }   
}  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值