700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 截取指定长度字符串

截取指定长度字符串

时间:2023-04-22 07:00:09

相关推荐

截取指定长度字符串

[\u0391-\uFFE5]匹配双字节字符(汉字+符号)

[\u4e00-\u9fa5]注意只匹配汉字,不匹配双字节字符

代码

///<summary>

///截取指定长度的字符串(Unicode占两位)

///</summary>

///<paramname="source">指定字符串</param>

///<paramname="length">指定长度</param>

///<returns>返回指定字符串长度的</returns>

publicstaticstringSub(stringsource,intlength)

{

stringtemp=source;

if(Regex.Replace(temp,"[\u0391-\uffe5]","",RegexOptions.IgnoreCase).Length<=length)

{

returntemp;

}

for(inti=temp.Length;i>=0;i--)

{

temp=temp.Substring(0,i);

if(Regex.Replace(temp,"[\u0391-\uffe5]","",RegexOptions.IgnoreCase).Length<=length)

{

returntemp+"";

}

}

return"";

}

上面这种执行效率比下面这种方法要高,耗时要短:

代码 ///<summary>

///截取指定长度的字符串(Unicode占两位)

///</summary>

///<paramname="source">指定字符串</param>

///<paramname="length">指定长度</param>

///<returns>返回指定字符串长度的</returns>

publicstaticstringSLeft(stringsource,intlength)

{

Regexregex=newRegex("[\u0391-\uffe5]+",piled);

char[]stringChar=source.ToCharArray();

stringsb="";

intnLength=0;

for(inti=0;i<stringChar.Length;i++)

{

if(nLength>=length)

{

break;

}

if(regex.IsMatch((stringChar[i]).ToString()))

{

sb+=stringChar[i];

nLength+=2;

}

else

{

sb+=stringChar[i];

nLength=nLength+1;

}

}

returnsb.ToString();

}

下面这种方法耗时最短,效率最高:

代码 publicstaticstringGetStr(stringsource,intlength)

{

intcount=0;

for(inti=0;i<source.Length;i++)

{

if(((int)source[i]).ToString("X2").Length==4)

count+=2;

else

count+=1;

}

if(count>length)

{

StringBuildersb=newStringBuilder();

count=0;

for(inti=0;i<source.Length;i++)

{

chartemp=source[i];

if(((int)temp).ToString("X2").Length==4)

{

count+=2;

}

else

{

count+=1;

}

if(count<length)

{

sb.Append(temp);

}

elseif(count==length)

{

sb.Append(temp);

break;

}

elseif(count>length)

{

sb.Append("");

break;

}

}

returnsb.ToString();

}

else

{

returnsource;

}

}

测试代码如下:

代码 stringsource="《中国》按时打发按时打发撒地方啊飒飒asdfasdfasd的法师打发似的<发(生的发生)地方按时打发是asdfasdfas";

intlength=10;

DateTimedt=DateTime.Now;

for(inti=0;i<1000;i++)

{

stringtemp=StrFun.SLeft(source,length);

}

TimeSpants=DateTime.Now-dt;

Console.WriteLine(ts.TotalMilliseconds);

dt=DateTime.Now;

for(inti=0;i<1000;i++)

{

stringtemp=StrFun.Sub(source,length);

}

ts=DateTime.Now-dt;

Console.WriteLine(ts.TotalMilliseconds);

dt=DateTime.Now;

for(inti=0;i<1000;i++)

{

stringtemp=StrFun.GetStr(source,length);

}

ts=DateTime.Now-dt;

Console.WriteLine(ts.TotalMilliseconds);

Console.Read();

结果为:

2328.125

1515.625

15.625

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。