首页 > 学院 > 开发设计 > 正文

C#中进行中英文字符截取(中文2个长度,英文1个)

2019-11-06 07:23:36
字体:
来源:转载
供稿:网友

前言

最近项目有个需求,就是截取文本,区分中英文字符,中文算2个长度,英文算1个长度,截取后增加…,占3个长度(包括在限制长度内),需求不复杂,想要写出较好的方法,得稍稍费点心思,下面是笔者写的代码,仅供参考。

代码

/// <summary>/// 截取文本,区分中英文字符,中文算两个长度,英文算一个长度,截取后增加...,占3个长度(包括在限制长度内)/// </summary>/// <param name="str"></param>/// <param name="length">不小于3</param>/// <returns></returns>public string GetCnEnSubString(string str, int length){ if (length < 3) length = 3; //记录length一半的长度 int i = length >> 1; int j, step; //定义编码器,GB2312中文占2个长度,英文占1个长度 Encoding code = System.Text.Encoding.GetEncoding("GB2312"); //逐渐增加i值,直至长度大于限制长度 while (i <= str.Length) { j = code.GetByteCount(str.Substring(0, i)); if (j <= length) { //计算增加的步长 step = (length - j) >> 1; if (step > 0) i += step; else i++; } else { //回退,逐渐减小i值,直至加上3后,不大于限制长度 while (code.GetByteCount(str.Substring(0, i - 1)) > (length - 3)) i--; return str.Substring(0, i - 1) + "..."; } } //如果将原字符串遍历完后,仍不大于限制长度,返回原字符 return str;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表