dongtunzidi 2009-08-18 16:28
浏览 300
已采纳

怎样获取中文字串的首字母?

我想提取一串中文的拼音的首字母的集合,应该怎么办?例如:我是中国人 提取出 wszgr

  • 写回答

5条回答 默认 最新

  • walsh_bupt 2009-08-18 20:55
    关注

    [code="java"]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("我是中国人"));
    }
    

    }[/code]

    输出结果:
    wszgr

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型