首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

截取字符串长度有关问题

2013-02-03 
截取字符串长度问题。遇到一个问题,英文长度跟中文长度差了一半。效果很不好。怎么解决啊。%#function.GetLef

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


<%#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;
    }


经测试,可以用。

热点排行