获取汉字的首字母

因为项目需要,根据汉字的首字母对一个字段进行排序。所以有了下面这个方法。

  先说下这个方法存在的问题和原理。

    第一这个方法是根据汉字的gb2312 编码来确定首字母的。这里有必要去了解一下gb2312,他分了区位码,可以自己去,区码+oxA0加位码+oxA0构成了gb2312编码。

    所以我们要做的就是获得首字母,转gb2312 转 区位码。 对于常见字这里是区位码是按照拼音顺序排列。一些生僻字就是按笔画顺序排列的。对于这样的汉字下面的方法就无能为力了。

using System;
using System.Collections.Generic;
using System.Text;

namespace Samddy.Jincaizi.WXCommon
{
    public class FirstLetterHelper
    {
        public static string FirstLetter(byte[] bg2312)
        {
            if (bg2312.Length != 2)
                return "Error";
            string strLetter = "Zz";
            byte b1 = bg2312[0];
            byte b2 = bg2312[1];
            string s1 = String.Format("{0:D2}", b1 - 160);
            string s2 = String.Format("{0:D2}", b2 - 160);
            int nCode = Convert.ToInt32(s1 + s2);
            if (nCode >= 1601 && nCode < 1637) strLetter = "A";
            if (nCode >= 1637 && nCode < 1833) strLetter = "B";
            if (nCode >= 1833 && nCode < 2078) strLetter = "C";
            if (nCode >= 2078 && nCode < 2274) strLetter = "D";
            if (nCode >= 2274 && nCode < 2302) strLetter = "E";
            if (nCode >= 2302 && nCode < 2433) strLetter = "F";
            if (nCode >= 2433 && nCode < 2594) strLetter = "G";
            if (nCode >= 2594 && nCode < 2787) strLetter = "H";
            if (nCode >= 2787 && nCode < 3106) strLetter = "J";
            if (nCode >= 3106 && nCode < 3212) strLetter = "K";
            if (nCode >= 3212 && nCode < 3472) strLetter = "L";
            if (nCode >= 3472 && nCode < 3635) strLetter = "M";
            if (nCode >= 3635 && nCode < 3722) strLetter = "N";
            if (nCode >= 3722 && nCode < 3730) strLetter = "O";
            if (nCode >= 3730 && nCode < 3858) strLetter = "P";
            if (nCode >= 3858 && nCode < 4027) strLetter = "Q";
            if (nCode >= 4027 && nCode < 4086) strLetter = "R";
            if (nCode >= 4086 && nCode < 4390) strLetter = "S";
            if (nCode >= 4390 && nCode < 4558) strLetter = "T";
            if (nCode >= 4558 && nCode < 4684) strLetter = "W";
            if (nCode >= 4684 && nCode < 4925) strLetter = "X";
            if (nCode >= 4925 && nCode < 5249) strLetter = "Y";
            if (nCode >= 5249 && nCode < 5590) strLetter = "Z";
            return strLetter;
        }
    }
}

转载于:https://www.cnblogs.com/wxzl/archive/2012/04/16/2451237.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值