关键字:首字母;汉字转化字母;GetBytes;中文编码
很多商业逻辑都会冒出一些稀奇古怪却又不得不作的问题,比方说首字母查询.例:资料库中有资料如下CompanyName为"一等一科技有限公司",而User需要输入"YDYKJYXGS"(即每个字的首字母)而直接定位到该笔资料.此时要如何实现呢,相信最简单的方式莫过于:在资料表中加入一栏位:HotKey,内容即此首字母组合.那么在Query资料时,直接like就可以获取资料.
下面介绍如何取得一个中文汉字的首字母:
public string Extract_HZ(string HZstr)
{
string output = "";
for (int index = 0; index < HZstr.Length; index++)
{
string HZ = HZstr[index].ToString();
byte[] ZW = new byte[2];
long HZ_INT;
ZW = System.Text.Encoding.Default.GetBytes(HZ);
if (ZW.Length < 2)
{
output += HZ;
continue;
}
int i1 = (short)(ZW[0]);
int i2 = (short)(ZW[1]);
HZ_INT = i1 * 256 + i2;
#region 转换成拼音的小写首字母
if ((HZ_INT >= 45217) && (HZ_INT <= 45252))
{
output += "a"; continue;
}
if ((HZ_INT >= 45253) && (HZ_INT <= 45760))
{
output += "b"; continue;
}
if ((HZ_INT >= 45761) && (HZ_INT <= 46317))
{
output += "c"; continue;
}
if ((HZ_INT >= 46318) && (HZ_INT <= 46825))
{
output += "d"; continue;
}
if ((HZ_INT >= 46826) && (HZ_INT <= 47009))
{
output += "e"; continue;
}
if ((HZ_INT >= 47010) && (HZ_INT <= 47296))
{
output += "f"; continue;
}
if ((HZ_INT >= 47297) && (HZ_INT <= 47613))
{
output += "g"; continue;
}
if ((HZ_INT >= 47614) && (HZ_INT <= 48118))
{
output += "h"; continue;
}
if ((HZ_INT >= 48119) && (HZ_INT <= 49061))
{
output += "j"; continue;
}
if ((HZ_INT >= 49062) && (HZ_INT <= 49323))
{
output += "k"; continue;
}
if ((HZ_INT >= 49324) && (HZ_INT <= 49895))
{
output += "l"; continue;
}
if ((HZ_INT >= 49896) && (HZ_INT <= 50370))
{
output += "m"; continue;
}
if ((HZ_INT >= 50371) && (HZ_INT <= 50613))
{
output += "n"; continue;
}
if ((HZ_INT >= 50614) && (HZ_INT <= 50621))
{
output += "o"; continue;
}
if ((HZ_INT >= 50622) && (HZ_INT <= 50905))
{
output += "p"; continue;
}
if ((HZ_INT >= 50906) && (HZ_INT <= 51386))
{
output += "q"; continue;
}
if ((HZ_INT >= 51387) && (HZ_INT <= 51445))
{
output += "r"; continue;
}
if ((HZ_INT >= 51446) && (HZ_INT <= 52217))
{
output += "s"; continue;
}
if ((HZ_INT >= 52218) && (HZ_INT <= 52697))
{
output += "t"; continue;
}
if ((HZ_INT >= 52698) && (HZ_INT <= 52979))
{
output += "w"; continue;
}
if ((HZ_INT >= 52980) && (HZ_INT <= 53640))
{
output += "x"; continue;
}
if ((HZ_INT >= 53689) && (HZ_INT <= 54480))
{
output += "y"; continue;
}
if ((HZ_INT >= 54481) && (HZ_INT <= 55289))
{
output += "z"; continue;
}
#endregion
}
return output;
}
以上仅适用简体中文,如果是繁体中文,可的尝试下列方法:
if (HZ.CompareTo("吖") < 0)
{
output += HZ; continue;
}
if (HZ.CompareTo("八") < 0)
{
output += "a"; continue;
}
if (HZ.CompareTo("嚓") < 0)
{
output += "b"; continue;
}
if (HZ.CompareTo("咑") < 0)
{
output += "c"; continue;
}
if (HZ.CompareTo("妸") < 0)
{
output += "d"; continue;
}
if (HZ.CompareTo("发") < 0)
{
output += "e"; continue;
}
if (HZ.CompareTo("旮") < 0)
{
output += "f"; continue;
}
if (HZ.CompareTo("铪") < 0)
{
output += "g"; continue;
}
if (HZ.CompareTo("讥") < 0)
{
output += "h"; continue;
}
if (HZ.CompareTo("咔") < 0)
{
output += "j"; continue;
}
if (HZ.CompareTo("垃") < 0)
{
output += "k"; continue;
}
if (HZ.CompareTo("嘸") < 0)
{
output += "l"; continue;
}
if (HZ.CompareTo("拏") < 0)
{
output += "m"; continue;
}
if (HZ.CompareTo("噢") < 0)
{
output += "n"; continue;
}
if (HZ.CompareTo("妑") < 0)
{
output += "o"; continue;
}
if (HZ.CompareTo("七") < 0)
{
output += "p"; continue;
}
if (HZ.CompareTo("亽") < 0)
{
output += "q"; continue;
}
if (HZ.CompareTo("仨") < 0)
{
output += "r"; continue;
}
if (HZ.CompareTo("他") < 0)
{
output += "s"; continue;
}
if (HZ.CompareTo("哇") < 0)
{
output += "t"; continue;
}
if (HZ.CompareTo("夕") < 0)
{
output += "w"; continue;
}
if (HZ.CompareTo("丫") < 0)
{
output += "x"; continue;
}
if (HZ.CompareTo("帀") < 0)
{
output += "y"; continue;
}
if (HZ.CompareTo("咗") < 0)
{
output += "z"; continue;
}
如有更好想法,欢迎一起讨论