【求助】求一个高效的中英文全角半角符号字符截取函数

demoooo 2010-05-30 06:28:40
原先看到过,现在找不到了....

有收藏或写过的朋友共享下吧.谢谢

使用比较频繁,效率要高一些, 貌似都是转到byte读长度的?这个效率怎样

半角英文数字算1个, 中文算2个,全角算2个...

支持特殊符号 , 也就是混合字符截取的长度要基本一致. 谢谢啊

例 自定义的substr函数
substr ("字符abd<全角>《》<> 2222331233AbC",25)

应该输出到 “字符abd<全角>《》<> 2”
...全文
130 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
demoooo 2010-05-31
  • 打赏
  • 举报
回复
楼上这个不错
demoooo 2010-05-31
  • 打赏
  • 举报
回复
顶一下结贴
winner2050 2010-05-30
  • 打赏
  • 举报
回复
#region 截短字串的函数,分区中英文
/// <summary>
/// 截短字串的函数
/// </summary>
/// <param name="mText">要加工的字串</param>
/// <param name="byteCount">长度</param>
/// <returns>被加工过的字串</returns>
public static string Left(string mText, int byteCount)
{
if (byteCount < 1)
return mText;

if (System.Text.Encoding.Default.GetByteCount(mText) <= byteCount)
{
return mText;
}
else
{
byte[] txtBytes = System.Text.Encoding.Default.GetBytes(mText);
byte[] newBytes = new byte[byteCount - 4];

for (int i = 0; i < byteCount - 4; i++)
{
newBytes[i] = txtBytes[i];
}
string OutPut = System.Text.Encoding.Default.GetString(newBytes) + "...";
if (OutPut.EndsWith("?...") == true)
{
OutPut = OutPut.Substring(0, OutPut.Length - 4);
OutPut += "...";
}
return OutPut;
}
}
#endregion
wuyq11 2010-05-30
  • 打赏
  • 举报
回复
足球中国 2010-05-30
  • 打赏
  • 举报
回复
我都是用微软的库没测试过他的效率不过至少不用担心出问题。
demoooo 2010-05-30
  • 打赏
  • 举报
回复

public string substr(string str, int len)
{

int bytecount = Encoding.Default.GetByteCount(str);
int sum = 0;
if (bytecount > len)
{
for (int i = 0; i < len; i++)
{
if (sum < len)
{
sum += Encoding.Default.GetByteCount(str[i].ToString());
}
else
{
if (sum % 2 == 0)
{
sum = i;
}
else
{
sum = i - 1;
}
break;
}
}
str = str.Substring(0, sum);
}
return str;
}




这个好像可以

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧