读书人

截取字符串长度有关问题

发布时间: 2013-02-03 12:33:31 作者: rapoo

截取字符串长度问题。
遇到一个问题,英文长度跟中文长度差了一半。效果很不好。怎么解决啊。


<%#function.GetLeft(Eval("typename").ToString(), 12)%>

public static string GetLeft(string content, int count)
{
if (content.Length > count)
{
content = content.Substring(0, count);
}
else
{
content = content.ToString();
}
return content;
}
[解决办法]

引用:
public static string GetLeft(string content, int count)
{
return Regex.Match("dds字符串", @"^([\u4e00-\u9fa5]
[解决办法]
\S{1,2}){1,"+count+"}").Value;
}

改成这样更准确一点(包含中文标点):
public static string GetLeft(string content, int count)
{
return Regex.Match("sdd字符3adfsd", @"^([\u4e00-\u9fa5
[解决办法]

[解决办法]

[解决办法]

[解决办法]

[解决办法]

[解决办法]
,!
[解决办法]
?]
[解决办法]
\S{1,2}){1,"+count+"}").Value;
}
不过测试发现,如果前面的单字节字符个数是奇数的话,最终的结果就是多了一个单字节字符,比如上面的结果如果count是4的话,返回的就是“sdd字符3a”,这也似乎没好的办法。
[解决办法]
public static string GetLeft(string str, int length)
{
if (str == null)

return string.Empty;



int len = length * 2;

int j = 0, k = 0;

Encoding encoding = Encoding.GetEncoding("gb2312");



for (int i = 0; i < str.Length; i++)


{

byte[] bytes = encoding.GetBytes(str.Substring(i, 1));

if (bytes.Length == 2)//不是英文

j += 2;

else

j++;



if (j <= len)

k += 1;



if (j >= len)

return str.Substring(0, k) + "...";

}

return str;
}


经测试,可以用。

读书人网 >asp.net

热点推荐