当前位置:编程学习 > C#/ASP.NET >>

截取指定长度汉字超出部分以"..."代替

现有新闻数据表news,其中有新闻标题title字段。
请问,我如何能将title字段中取出的数据,截取它的指定长度汉字,超出部分以"..."代替


各位大哥注意,我最终要将title字段绑定在DataGrid中的“新闻标题”中,所以请尽量往那个方面考虑。
如果有这方面源码或实力的话请发给我,小弟急用,谢谢!
我的MSN:blovefeather@163.com --------------------编程问答-------------------- 能实现
“现有新闻数据表news,其中有新闻标题title字段。
请问,我如何能将title字段中取出的数据,截取它的指定长度汉字,超出部分以"..."代替”
这也可以
--------------------编程问答-------------------- 给你个GRIDVIEW的例子.楼主再改改,.
/// <summary>
        /// gridView字符过长截断显示
        /// </summary>
        /// <param name="GV">gridView</param>
        /// <param name="num">字符显示长度</param>
        public static void DataViewShow(GridView GV, int num)
        {
            for (int i = 0; i < GV.Rows.Count; i++)
            {
                for (int j = 0; j < GV.Columns.Count; j++)
                {
                    GV.Rows[i].Cells[j].ToolTip = GV.Rows[i].Cells[j].Text;
                    if ((GV.Rows[i].Cells[j].Text).Length > num)
                    {
                        GV.Rows[i].Cells[j].Text = (GV.Rows[i].Cells[j].Text).Substring(0, num) + "...";
                    }
                }
            }
        } --------------------编程问答-------------------- <%# TrimString(Eval("Title"))%>

TrimString写到后台

TrimString (object str){
  if(str.ToString().Length>8){
  return str.ToString().Substring(0,8);
 }
else return str.ToString()
} --------------------编程问答-------------------- string   a="sssssssssss";   
  string   b;   
    
  if(a.length>10)   
  b=a.substring(0,10)+"..."; --------------------编程问答-------------------- /// <summary>
        /// 将指定字符串按指定长度进行剪切,
        /// </summary>
        /// <param name="oldStr">需要截断的字符串</param>
        /// <param name="maxLength">字符串的最大长度</param>
        /// <param name="endWith">超过长度的后缀</param>
        /// <returns>如果超过长度,返回截断后的新字符串加上后缀,否则,返回原字符串</returns>
        public static string StringTruncat(string oldStr, int maxLength, string endWith)
        {
            if (string.IsNullOrEmpty(oldStr))
                // throw new NullReferenceException("原字符串不能为空");
                return oldStr + endWith;
            if (maxLength < 1)
                throw new Exception("返回的字符串长度必须大于[0]");
            if (oldStr.Length > maxLength)
            {
                string strTmp = oldStr.Substring(0, maxLength);
                if (string.IsNullOrEmpty(endWith))
                    return strTmp;
                else
                    return strTmp + endWith;
            }
            return oldStr;
        }

调用:
<%# StringTruncat(Eval("Title").ToString(),20,"...")%>
--------------------编程问答-------------------- xray2005(风车车--要飞翔,必须靠自己!) 

<%# StringTruncat(Eval("Title").ToString(),20,"...")%>
这是什么意思? --------------------编程问答-------------------- xray2005(风车车--要飞翔,必须靠自己!) 

<%# StringTruncat(Eval("Title").ToString(),20,"...")%>
这是什么意思?
=======================================================
明白了^-^ --------------------编程问答-------------------- 又学到一样了 --------------------编程问答-------------------- 如果我需要讲title这一列绑定在DataGrid中的新闻标题这列中该怎么做?
注意,是DataGrid,不是DataView --------------------编程问答-------------------- 以上的方法都有个问题  就是  英文的时候和汉字的时候差别比较大  比如 汉字汉字汉字
和111111占的地方就差别非常大 会很不美观 --------------------编程问答-------------------- CSS里面有方法直接可以 --------------------编程问答-------------------- {

display: block;

width: 200px;

overflow: hidden;

white-space: nowrap;

-o-text-overflow: ellipsis;

text-overflow: ellipsis;

}试着加一下这个CSS --------------------编程问答-------------------- public string getsstr(string msg)
{
  if(msg.length>7)
      return msg.substring(0,7)+"...";
  else
     return msg+"...";
} --------------------编程问答-------------------- 要是给你的CSS不行  我自己写了一个 算像素的  比较准 但是长了也有误差 --------------------编程问答-------------------- 用css比较方便 --------------------编程问答-------------------- dgl_1225() ( ) 信誉:100  2007-8-23 10:37:04  得分: 0  
 
 
   
{

display: block;

width: 200px;

overflow: hidden;

white-space: nowrap;

-o-text-overflow: ellipsis;

text-overflow: ellipsis;

}试着加一下这个CSS

  
 
我试了,不行呀
=================
有没有后台执行的,将截断的字符绑定到DataGrid中的? --------------------编程问答-------------------- CSS应该可以的
.test1{

display: block;

width: 200px;

overflow: hidden;

white-space: nowrap;

-o-text-overflow: ellipsis;

text-overflow: ellipsis;

}

然后在你的代码里面给要绑定的地方指定class=test1

width: 200px; 这个地方你要更改~   改成你要的长度~ 否则当然没有效果了 --------------------编程问答-------------------- 看看这个

整个Copy出去 存成静态页面 --------------------编程问答-------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta name="author" content="??, aka Realazy" />

<meta name="copyright" content="?실piCreative Commonsj,http://www.creativecommons.cn/licenses/by-nc-sa/1.0/" />

<title>gpCSSB</title>

<style type="text/css">

* {

margin: 0;

padding: 0;

}

a {

text-decoration: none;

color: #df3a0e;

}

ul {

width: 200px;

margin: 40px auto;

padding: 12px 4px 12px 24px;

border: 1px solid #005fb0;

background: #e0f1ff;

}

li {

margin: 12px 0;

width: 200px;

}

li a {

display: block;

width: 200px;

overflow: hidden;

white-space: nowrap;

-o-text-overflow: ellipsis;

text-overflow: ellipsis;

}

/* firefox only */

li:not(p) { /* wtf is? pls let me know*/

clear: both;

}

li:not(p) a {

max-width: 170px;

float: left;

}

li:not(p):after {

content: "...";

float: left;

width: 25px;

padding-left: 5px;

color: #df3a0e;

}

</style>

</head>

<body>

<ul>

<li><a href="#" title="??">??</a></li>

<li><a href="#" title="11111111111111111111111111111111111">11111111111111111111111111111111111111111111111111111</a></li>

<li><a href="#" title="1111111111111111111111111111111111111111111111111111">1111111111111111111111111111111111111111111111111111</a></li>


</ul>

</body> 

</html> --------------------编程问答-------------------- /// <summary>
        /// 按字节数截取字符串,中文算两个字节,全角字符算两个字节,大写字母也算两个字节
       /// </summary>
       /// <param name="strSrc">要处理的字符串</param>
       /// <param name="count">要保留的字节数</param>
       /// <param name="withPoint">设置截取后加不加省略号('...') 默认的传true</param>
       /// <returns></returns>
       public static string GetStrByByteCount(string strSrc,int count,bool withPoint)
       {
           Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);
           char[] stringChar = strSrc.ToCharArray();
           StringBuilder sb = new StringBuilder();
           int nLength = 0;
           bool isCut = false;
           for (int i = 0; i < stringChar.Length; i++)
           {
               if ((regex.IsMatch((stringChar[i]).ToString())) || (stringChar[i] > 65280 && stringChar[i] < 65375) || (stringChar[i] > 64 && stringChar[i] < 91))
               {
                   nLength += 2;
                   if (nLength > count)
                   {
                       isCut = true;
                       break;
                   }
                   sb.Append(stringChar[i]);
               }
               else
               {
                   nLength = nLength + 1;
                   if (nLength > count)
                   {
                       isCut = true;
                       break;
                   }
                   sb.Append(stringChar[i]);
               }

           }
           if (isCut)
           {
               if (withPoint)
               {
                   return sb.ToString() + "...";
               }
               else
               {
                   return sb.ToString();
               }
           }
           else
           {
               return sb.ToString();
           }
       }

这个是我用的。中文和大写的算两个字节,还算准确。
前台绑定时加上这个方法就行了。 --------------------编程问答-------------------- 用CSS就行了,比较方便 --------------------编程问答-------------------- 将对应字段设为模版列

<asp:TemplateField HeaderText="名称" SortExpression="id">
                        <ItemTemplate><div class="SubContent" style="width:50px"><asp:Label ID="labName" runat="server" /></div></ItemTemplate>
                    </asp:TemplateField>


.SubContent
{
    text-overflow:ellipsis;
    overflow:hidden;
    white-space:nowrap;
    word-break:keep-all; 
}/*超出固定长度则多余部分会显示...*/ --------------------编程问答-------------------- 按字节数截取字符串,中文算两个字节,全角字符算两个字节,大写字母也算两个字节
这个截取的好全啊!! --------------------编程问答-------------------- 以上的方法还是有点问题~   比如 w  w占的地方比较大  但是i占的很小 所以字母多了以后 对不齐 --------------------编程问答-------------------- 嗯。
  程序没有绝对完美,只有相对,呵呵。 --------------------编程问答-------------------- 讲要截取的汉字列 设置为模板页

<asp:TemplateField HeaderText="名称" SortExpression="id">
                        <ItemTemplatestyle="width:50px"><asp:Label ID="labName" runat="server" Text='<%#CTZ(Eval("绑定列名").ToString())%>' /></div></ItemTemplate>
                    </asp:TemplateField>

后台
public string CTZ(string content)
{
    if(content.Length>XX)//你所设定的字符长度
    {
        content.Substring(0,XX) ;
        content+="....";
     }
     return content;
}


给分吧 LZ 
--------------------编程问答-------------------- 先写一个 字符串操作类 StringOperate.cs:
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// StringOperate 的摘要说明
/// </summary>
public class StringOperate
{
public StringOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
    public void LeftSubstring(string str, int len)
    {

    }
    public string CutString(string str, int len)
    {
        str = str.Trim();
        byte[] myByte = System.Text.Encoding.Default.GetBytes(str);
        if (myByte.Length > len)
        {
            string result = "";
            for (int i = 0; i < str.Length; i++)
            {
                byte[] tempByte = System.Text.Encoding.Default.GetBytes(result);
                if (tempByte.Length < len)
                {
                    result += str.Substring(i, 1);
                }
                else
                {
                    break;
                }
            }
            return result + "...";
        }
        else
        {
            return str;
        }
    }
}


在需要控制字数的页面写一个方法:
//控制字数
    public string ShowSubstring(string str, int number)
    {
        StringOperate newLiuYan = new StringOperate();
        return newLiuYan.CutString(str, number); //number 为设定的显示字数
    }

在绑定时使用:
<%# ShowSubstring(DataBinder.Eval(Container.DataItem, "content").ToString(),18)%>
// 这里设为 18 个字
--------------------编程问答-------------------- 我给我的给你
<asp:Label ID="lbl_Title" runat="server" Text='<%# (Eval("N_Title").ToString()).Length>21 ?((Eval("N_Title")).ToString()).Substring(0,21)+"...":Eval("N_Title") %>' ToolTip='<%# Eval("N_Title")%>'></asp:Label>

大于21就那样了 --------------------编程问答-------------------- http://blog.csdn.net/sendling/archive/2007/03/27/1543300.aspx
新闻标题太长,截取字段,鼠标放上去显示全部 --------------------编程问答-------------------- 还是觉得CSS好一些~ --------------------编程问答-------------------- CSS似乎好一些,但是实际数据已经到了客户端,而用((字段).Length>20)?(字段).Substring(0,20)+"…":(字段)  并没有输出到客户端{这样就省了一些网络资源},哪个好自己选吧 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 问题是汉字得算二位,还在写个函数处理一下比较好 --------------------编程问答-------------------- length属性时,汉字和英文字符都算做一个,
这样显示出来差别确实很大,这个怎样解决呢?
比如 ... 和 我我我

这两个长度一样,显示效果可差远了,字符越多,差距越大啊. --------------------编程问答-------------------- 你们都没看上面的回答么?
  这种差别上面都有答案啊,进帖子不要只看问题,看下面给的解决方法才是最重要的。

有些人一进帖子进胡乱说个答案,孰不知上面有N个比他好的解决方法,真是悲哀。 --------------------编程问答-------------------- #region 按字符串实际长度截取定长字符窜
        /// <summary>
        /// 按字符串实际长度截取定长字符窜
        /// </summary>
        /// <param name="str">原字符串</param>
        /// <param name="length">要截取的长度</param>
        /// <returns>string型字符串</returns>
        public string CutString(string str, int length)
        {
            string delsqace = str.Trim();
            int i = 0, j = 0;
            foreach (char chr in delsqace)
            {
                if ((int)chr > 127)
                {
                    i += 2;
                }
                else
                {
                    i++;
                }
                if (i > length)
                {
                    delsqace = delsqace.Substring(0, j);
                    break;
                }
                j++;
            }
            return delsqace;

        }
        #endregion


这个就不会出现中文和英文差别较大的了 --------------------编程问答-------------------- 剩下的都好办了 改一点就行  不知道楼主是这个意思吗 --------------------编程问答-------------------- Mark --------------------编程问答-------------------- 最初想到的办法是数据绑定的时候做个处理
css这个值得学习 --------------------编程问答-------------------- 还可以用CSS定义啊 长见识啊 --------------------编程问答-------------------- qingtian6(认真的鱼)

这个好. --------------------编程问答-------------------- 顶! --------------------编程问答-------------------- 在数据库调用中截取,是最好的方法 --------------------编程问答-------------------- /// <summary>
    /// 字符串处理静态类
    /// </summary>
    public static class StringMangeCust
    {
        /// <summary>
        /// 获取该字符串的字节数,按照英文一个字节,中文两个字节计算
        /// </summary>
        /// <param name="SourStr">需要计算的字符串</param>
        /// <returns>字节数</returns>
        public static int GetStringByteCount(string SourStr)
        {
            return  System.Text.Encoding.Default.GetByteCount(SourStr);
            
        }
        /// <summary>
        /// 返回一个字符串中的某个子字符串。
        /// </summary>
        /// <param name="SourStr">源字符串</param>
        /// <param name="StrIndex">起始位置</param>
        /// <param name="StrCount">子字符串的大小</param>
        /// <returns></returns>
        public static string SubString(string SourStr,int StrIndex, int StrCount)
        {
            byte[] TempBytes = System.Text.Encoding.Default.GetBytes(SourStr);
            string Result = "";
            int TempIndex = StrIndex;
            int TempCount = StrCount;
            int TempPlace=0;
            if ((StrCount > 0) & (TempBytes.Length >= StrIndex))
            {
                while (TempPlace < TempBytes.Length)
                {
                    if (TempBytes[TempPlace] > 127)
                    {
                        if (TempPlace == (TempIndex - 1))
                        {
                            TempIndex = TempIndex + 1;
                            TempPlace = TempPlace + 3;
                        }
                        else
                        {
                            TempPlace = TempPlace + 2;
                        }
                        if (TempPlace == (TempCount - 1))
                        {
                            TempPlace = TempPlace + 2;
                            TempCount = TempCount - 1;
                        }
                    }
                    else
                    {
                        TempPlace = TempPlace + 1;
                    }
                }
                if ((TempCount > 0) & (TempBytes.Length > StrIndex) & (TempBytes.Length>=(StrIndex+TempCount)))
                {
                    Result = System.Text.Encoding.Default.GetString(TempBytes, StrIndex, StrCount);
                }
            }
            return Result;
        }
        /// <summary>
        /// 按照子字符串的大小获取一个子字符串。
        /// </summary>
        /// <param name="SourStr">源字符串</param>
        /// <param name="StrCount">子字符串的大小</param>
        /// <returns></returns>
        public static string SubString(string SourStr, int StrCount)
        {
            return SubString(SourStr, 0, StrCount);
        }

        /// <summary>
        /// 获得16位MD5加密后的字符串。
        /// </summary>
        /// <param name="SourStr">需要加密的字符串</param>
        /// <returns>加密后的md5字符串,用HEX格式显示</returns>
        public static string getMd5Str(string SourStr)
        {
            MD5 m5Obj = MD5.Create();
            string Result = "";
            byte[] TempBytes = m5Obj.ComputeHash(Encoding.UTF8.GetBytes(SourStr));
            foreach (Byte TempByte in TempBytes)
            {
                Result = Result + TempByte.ToString("X2");
            }
            return Result;
        }

        /// <summary>
        /// 获取一个层
        /// </summary>
        /// <param name="Left">层的left</param>
        /// <param name="Top">曾的top</param>
        /// <returns>返回层的html代码</returns>
        public static string Ceate(string Left, string Top)
        {
            string Result = "";
            Result="<div id=\"Layer1\" style=\"position:absolute; width:200px; height:115px; z-index:1\"></div>";
            return Result;
        }
        /// <summary>
        /// 判断一个字符串是否为实数,是实数返回true,否则返回false
        /// </summary>
        /// <param name="SourStr">字符串</param>
        /// <returns>是实数返回true,否则返回false</returns>
        public static bool CheckStrToNumberic(string SourStr)
        {
            if (SourStr.Trim() == "") return true;
            try
            {
                Convert.ToDouble(SourStr);
                return true;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 取字符串中第一个圆括号括起来的数字
        /// </summary>
        /// <param name="SourString">字符串</param>
        /// <returns></returns>
        public static string SubStringID(String SourString)
        {
            if (SourString.IndexOf(")") > 0)
            {
                return SourString.Substring(1, SourString.IndexOf(")") - 1);
            }
            else
            {
                return "-1";
            }
        }
    }
--------------------编程问答-------------------- 请尽情享用开放代码。 --------------------编程问答-------------------- 你的分好像少了点。才20,太小气,现在物价都上涨。 --------------------编程问答-------------------- 直接在select语句里
select substring(title,1,20) from 表名
读出来后加... --------------------编程问答-------------------- 用Css控制 是最好的方法。

style="width:100px;text-overflow:ellipsis;overflow:hidden;table-layout:fixed;WHITE-SPACE: nowrap;"

需要改变长度就把 width调一下。 --------------------编程问答-------------------- 楼上基本都说完了。来晚了 --------------------编程问答-------------------- 学习,支持用CSS控制 --------------------编程问答-------------------- 以前我用三目判断
现在用CSS

CSS简单:

<DIV STYLE="width: 120px; height: 30px; border: 1px solid blue; 
            overflow: hidden; text-overflow:ellipsis"> 
<NOBR>就是比如有一行文字,很长,表格内一行显示不下</NOBR>
</DIV>
--------------------编程问答-------------------- 可以在数据库select操作的时候就实现了,然后直接读取就是了 不用页面上特意添加代码 --------------------编程问答-------------------- #region 实现截取字符串的方法(2)(加入中英文混合的方法)
        /// <summary>
        /// 实现截取字符串的方法(2)
        /// </summary>
        /// <param name="str">传入一个字符串</param>
        /// <param name="intLength">需要的长度</param>
        /// <returns>返回string</returns>
        public static string GetSubStr(string str,int intLength) 
        {
            string temp =NoHTML(str);
            int j = 0;
            int k = 0;
            for (int i = 0; i < temp.Trim().Length; i++)
            {
                if (Regex.IsMatch(temp.Substring(i, 1), @"[\u4e00-\u9fa5]+"))
                {
                    j += 2;
                }
                else
                {
                    j += 1;
                }
                if (j <= intLength)
                {
                    k += 1;
                }
                if (j >= intLength)
                {
                    return temp.Substring(0, k) + "...";
                }
            }
            return temp;

        }

        #endregion
这是截取字符串的方法。至于怎么调用,上面几位楼兄都有讲过,我就不讲,这个方法,我目前在用。 --------------------编程问答-------------------- 楼上的,你那方法截取的不准确啊。
 
支持CSS截取,^_^ --------------------编程问答-------------------- string   a="sssssssssss";   
  string   b;   
    
  if(a.length>10)   
  b=a.substring(0,10)+"...";

-------------------------------------------
这种方法比较简单 --------------------编程问答-------------------- .css a:hover
{
overflow: hidden; 
text-overflow:ellipsis;
break-word:break-all;
white-space: nowrap;
}

使用实例:
<html>
<head>
<title>
test
</title>
<style>
.css
{
overflow: hidden; 
text-overflow:ellipsis;
break-word:break-all;
white-space: nowrap;
}
</style>
</head>
<body>
<div class="css">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>
</body>
</html> --------------------编程问答-------------------- <%# DataBinder.Eval(Container.DataItem,"Title").ToString().Length<=28?DataBinder.Eval(Container.DataItem,"Title"):DataBinder.Eval(Container.DataItem,"Title").ToString().Substring(0,25)+"…" %> --------------------编程问答-------------------- 应该是convert(char(5),datetimevalue,110)才对吧 --------------------编程问答-------------------- 用CSS样式好些 --------------------编程问答-------------------- 原来还可以用CSS定长度呀?学习了! --------------------编程问答-------------------- 我回帖,为了10分。 --------------------编程问答-------------------- 用了上面所说的方法还是没有解决,当有中文和英文的时候还是不行 --------------------编程问答--------------------
引用 3 楼 foyuan 的回复:
<%#   TrimString(Eval( "Title "))%>

TrimString写到后台

TrimString   (object   str){
    if(str.ToString().Length> 8){
    return   str.ToString().Substring(0,8);
  }
else   return   str.ToString()
}


顶这个!不过改下: return   str.ToString().Substring(0,8)+"....."; --------------------编程问答-------------------- css可以改变长度 受教了 

补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,