C# 我如何用一个“…”来截断字符串&引用;如果它们太长?

C# 我如何用一个“…”来截断字符串&引用;如果它们太长?,c#,string,C#,String,希望有人有个好主意。我有这样的字符串: abcdefg abcde abc 我需要的是,如果超过规定的长度,则它们应显示如下: abc .. abc .. abc 有什么简单的C代码可以用吗 public string TruncString(string myStr, int THRESHOLD) { if (myStr.Length > THRESHOLD) return myStr.Substring(0, THRESHOLD) + "...";

希望有人有个好主意。我有这样的字符串:

abcdefg
abcde
abc
我需要的是,如果超过规定的长度,则它们应显示如下:

abc ..
abc ..
abc
有什么简单的C代码可以用吗

public string TruncString(string myStr, int THRESHOLD)
{
    if (myStr.Length > THRESHOLD)
        return myStr.Substring(0, THRESHOLD) + "...";
    return myStr;
}
忽略命名约定,这只是为了防止他实际需要阈值变量,或者如果它总是相同的大小

或者

string res = (myStr.Length > THRESHOLD) ? myStr.Substring(0, THRESHOLD) + ".." : myStr;
代码隐藏:

string shorten(sting s)
{
    //string s = abcdefg;
    int tooLongInt = 3;

    if (s.Length > tooLongInt)
        return s.Substring(0, tooLongInt) + "..";

    return s;
}
标记:

<td><%= shorten(YOUR_STRING_HERE) %></td>

也许最好实现一种方法:

string shorten(sting yourStr)
{
//Suppose you have a string yourStr, toView and a constant value 

    string toView;
    const int maxView = 3;

    if (yourStr.Length > maxView)
        toView = yourStr.Substring(0, maxView) + " ..."; // all you have is to use Substring(int, int) .net method
    else
        toView = yourStr;
return toView;
}

您可以使用Substring函数。

当然,下面是一些示例代码:

string str = "abcdefg";
if (str.Length > X){
   str = str.Substring(0, X) + "...";
}

在.NET Framework中没有一个内置的方法可以做到这一点,但是这是一个非常容易自己编写的方法。以下是步骤,请尝试自己制作,并让我们知道您的想法

  • 创建一个方法,可能是一个
    公共静态void truncatewithelipsis(这个字符串值,int maxLength)

  • 检查传入值是否大于使用指定的
    maxLength
    。如果
    不大于
    maxLength
    ,只需返回

  • 如果我们没有按原样返回传入的值,那么我们知道需要截断。所以我们需要使用。该方法将根据指定的起始值和结束值返回字符串的较小部分。结束位置是由
    maxLength
    参数传入的位置,因此请使用它

  • 返回字符串的子部分加上省略号


  • 以后的一个很好的练习是更新这个方法,并且只有在完整的单词之后才将其打断。您还可以创建一个重载来指定如何显示已被截断的字符串。例如,如果您的应用程序设置为通过单击显示更多详细信息,则该方法可以返回“(单击以获取更多信息)”而不是“…”

    以下是封装在扩展方法中的逻辑:

    public static string Truncate(this string value, int maxChars)
    {
        return value.Length <= maxChars ? value : value.Substring(0, maxChars) + "...";
    }
    

    下面是一个解释椭圆长度的版本:

        public static string Truncate(this string value, int maxChars)
        {
            const string ellipses = "...";
            return value.Length <= maxChars ? value : value.Substring(0, maxChars - ellipses.Length) + ellipses;
        }
    
    公共静态字符串截断(此字符串值,int maxChars)
    {
    常量字符串省略号=“…”;
    
    return value.Length我在搜索“C#truncate省略号”后发现了这个问题。使用各种答案,我创建了自己的解决方案,具有以下功能:

  • 一种推广方法
  • 添加省略号
  • 使省略号可选
  • 在尝试截断字符串之前,请验证该字符串是否为null或空

    public static class StringExtensions
    {
        public static string Truncate(this string value, 
            int maxLength, 
            bool addEllipsis = false)
        {
            // Check for valid string before attempting to truncate
            if (string.IsNullOrEmpty(value)) return value;
    
            // Proceed with truncating
            var result = string.Empty;
            if (value.Length > maxLength)
            {
                result = value.Substring(0, maxLength);
                if (addEllipsis) result += "...";
            }
            else
            {
                result = value;
            }
    
            return result;
        }
    }
    

  • 我希望这对其他人有所帮助。

    我最近遇到了这个问题。我在nvarcharMAX数据库字段中存储了一条4000个字符的“状态”消息。但是,我的状态消息正在累积并遇到异常

    但这不是一个简单的截断情况,因为任意截断将孤立状态消息的一部分,所以我确实需要在字符串的一致部分“截断”

    通过将字符串转换为字符串数组,删除第一个元素,然后还原为字符串,我解决了这个问题


    希望它能帮助某人走出困境。

    < P> >所有的很好的答案,但要稍微清理一下,如果你的字符串是句子,不要在一个词中间断开你的字符串。

    private string TruncateForDisplay(this string value, int length)
    {
      if (string.IsNullOrEmpty(value)) return string.Empty;
      var returnValue = value;
      if (value.Length > length)
      {
        var tmp = value.Substring(0, length) ;
        if (tmp.LastIndexOf(' ') > 0)
           returnValue = tmp.Substring(0, tmp.LastIndexOf(' ') ) + " ...";
      }                
      return returnValue;
    }
    

    您希望在哪里执行此操作?-在表单、WPF应用程序或网站中-请提供更多详细信息!大多数解决方案的问题是,它们使用大量的
    Char
    s作为限制。不幸的是,图形宽度可能会有很大差异。然后还有UTF-16代理,组合字符,…这不是建议的问题的重复这是一个非常一般的问题,而建议的重复是一个非常具体的问题。这绝对不是建议的问题的重复。这个问题甚至不接近建议的重复。请删除重复属性。Thx。是否可以将它变成一行,我可以使用内联?T如果他在中间拆分一个代码点,他会产生无效的字符串:(我怎么能把它放进:“+字符串+”?谢谢布莱恩。你的答案看起来不错。请原谅我的简单问题,但是我如何使用一个扩展方法?”Unicode U+2026。快速添加以包含空检查谢谢@Malako
    :value.Substring(0,maxChars)+(char)0x2026;
    如果使用省略号字符,则不需要省略号。它的字符长度将始终为1
    const char eliple=(char)0x2026;
    这是唯一一个不会分解单词的答案。因此,我认为唯一正确的答案是@mxmissile-给定OP数据,对于“abcdefg”,截断为3个字符,转到“abc…”即使这样做也不正确。OP示例数据清楚地表明在连续文本中间有一个硬截断。更糟的是,这个答案会产生一个错误。因为数据不包含一个空间,所以<代码> ListTimeXOF/<代码>将返回-1,而<代码>子字符串< /代码>将导致运行时错误。
    public static class StringExtensions
    {
        public static string Truncate(this string value, 
            int maxLength, 
            bool addEllipsis = false)
        {
            // Check for valid string before attempting to truncate
            if (string.IsNullOrEmpty(value)) return value;
    
            // Proceed with truncating
            var result = string.Empty;
            if (value.Length > maxLength)
            {
                result = value.Substring(0, maxLength);
                if (addEllipsis) result += "...";
            }
            else
            {
                result = value;
            }
    
            return result;
        }
    }
    
            if (CurrentStatus.Length >= 3750)
            {
                // perform some truncation to free up some space.
    
                // Lets get the status messages into an array for processing...
                // We use the period as the delimiter, then skip the first item and re-insert into an array.
    
                string[] statusArray = CurrentStatus.Split(new string[] { "." }, StringSplitOptions.None)
                                        .Skip(1).ToArray();
    
                // Next we return the data to a string and replace any escaped returns with proper one.
                CurrentStatus = (string.Join(".", statusArray))
                                        .Replace("\\r\\n", Environment.NewLine);
    
    
            }
    
    private string TruncateForDisplay(this string value, int length)
    {
      if (string.IsNullOrEmpty(value)) return string.Empty;
      var returnValue = value;
      if (value.Length > length)
      {
        var tmp = value.Substring(0, length) ;
        if (tmp.LastIndexOf(' ') > 0)
           returnValue = tmp.Substring(0, tmp.LastIndexOf(' ') ) + " ...";
      }                
      return returnValue;
    }