向C#的String类添加按字节截取字符串的扩展方法
Strings ="a加b等于c,如果a等1、b等于2,那么c等3";
byte[]bytes=System.Text.Encoding.Unicode.GetBytes(s);
publicstaticclassStringExt
{
publicstaticStringbSubstring(thisstrings,intlength)
{
byte[]bytes=System.Text.Encoding.Unicode.GetBytes(s);
intn=0; // 表示当前的字节数
inti=0; // 要截取的字节数
for(;i<bytes.GetLength(0)&&n<length;i++)
{
// 偶数位置,如0、2、4等,为UCS2编码中两个字节的第一个字节
if(i%2==0)
{
n++; // 在UCS2第一个字节时n加1
}
else
{
// 当UCS2编码的第二个字节大于0时,该UCS2字符为汉字,一个汉字算两个字节
if(bytes[i]>0)
{
n++;
}
}
}
// 如果i为奇数时,处理成偶数
if(i%2==1)
{
// 该UCS2字符是汉字时,去掉这个截一半的汉字
if(bytes[i]>0)
i=i-1;
// 该UCS2字符是字母或数字,则保留该字符
else
i=i+1;
}
returnSystem.Text.Encoding.Unicode.GetString(bytes,0,i);
}
}
可以使用下面的代码来截取字符串:
StringsubStr=s.bSubstring(6); // substr的值是"a加b等"
关于扩展方法的详细讲解,请读者参阅《.net framework3.5新特性2:var、初始化、匿名类和扩展方法 》一文。
文章来源:http://www.cnblogs.com/nokiaguy/archive/2008/09/06/1285794.html
浙公网安备 33010602011771号