求以一定字节长度拆分含有汉字及英文的字符串方法
字符串示例:CSDN论坛
字母算1字节,汉字算2字节
拆分长度4或5都将拆分为两个字符串:CSDN/论坛
拆分长度为6则结果为:CSDN论/坛
求高效的方法
问题点数:100、回复次数:7Top
1 楼flygoldfish(长江支流)回复于 2006-03-07 11:47:27 得分 20
一个一个的取,然后 与A-Z的ASCII比Top
2 楼lovvver(ElephantTalk.Bright)回复于 2006-03-07 12:03:55 得分 20
给你一个判断是单字节还是双字节的判断方法,然后通过这个方法,就可以做到你要求的:
string str = "a";//or str = "好";
byte[] bt = System.Text.Encoding.Default .GetBytes (str);
bt.Length=字节数Top
3 楼hykx(寒夜看雪)回复于 2006-03-07 12:29:42 得分 0
这些我做过的,只是不知道是不是最好的方法,想求最好的方法Top
4 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2006-03-07 12:40:26 得分 0
private string SplitString(string temp,int length)
{
byte[] b = Encoding.GetEncoding("gb2312").GetBytes(temp);
if (length <= 0 || length > b.Length)
{
return null;
}
byte[] result = new byte[length];
Array.Copy(b,0,result,0,length);
string s = temp.Substring(0,length);
if (s == Encoding.GetEncoding("gb2312").GetString(result))
{
return s;
}
else
{
return temp.Substring(0,length-1);
}
}
string str = "CSDN论坛";
Console.WriteLine("0:" + SplitString(str,0));
Console.WriteLine("4:" + SplitString(str,4));
Console.WriteLine("5:" + SplitString(str,5));
Console.WriteLine("6:" + SplitString(str,6));
Console.WriteLine("10:" + SplitString(str,10));Top
5 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2006-03-07 12:41:15 得分 0
只是随便写的
呵呵
我也不知道效率如何
如果字符串不是很大
效率差别应该可以不计Top
6 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2006-03-07 12:50:03 得分 40
不好意思
上面的有问题
private string SplitString(string temp,int length)
{
byte[] b = Encoding.GetEncoding("gb2312").GetBytes(temp);
if (length <= 0 || length > b.Length)
{
return null;
}
byte[] result;
if (length%2 == 0 || b[length-1] == 0)
{
result = new byte[length];
Array.Copy(b,0,result,0,length);
}
else
{
result = new byte[length-1];
Array.Copy(b,0,result,0,length-1);
}
return Encoding.GetEncoding("gb2312").GetString(result);
}Top
7 楼lovvver(ElephantTalk.Bright)回复于 2006-03-07 13:02:30 得分 20
如果只截取一次,就简单。
如:string str = "abc好de的f人民ghijk";
int i_cut = 10;
你就想对str截取10个长度的字符串:
string strCut = str.Substring(0,i_cut);
int i_RealLength = System.Text.Encoding.Default .GetBytes (strCut).Length;
然后比较i_cut和i_RealLength的差值,(i_cut=10,i_RealLength=13)
你就在strCut上减3个字符,。。。当差别字符数在某一数字之内,可以逐个判断处理。Top




