如果它们太长,我如何用"..."截断我的字符串?

Mel*_*ony 71 c# string

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

abcdefg
abcde
abc
Run Code Online (Sandbox Code Playgroud)

我需要的是,如果超过指定的长度,他们将被剔除以显示如下:

abc ..
abc ..
abc
Run Code Online (Sandbox Code Playgroud)

我可以使用任何简单的C#代码吗?

Bry*_*tts 126

以下是扩展方法中包含的逻辑:

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

用法:

var s = "abcdefg";

Console.WriteLine(s.Truncate(3));
Run Code Online (Sandbox Code Playgroud)

  • ...(省略号)是那些关心的人的正确符号.Unicode U + 2026. (9认同)
  • 快速添加以包括空检查 (2认同)
  • 谢谢@Malako`:value.Substring(0,maxChars)+(char)0x2026;` (2认同)

JSt*_*ens 10

所有非常好的答案,但要稍微清理一下,如果您的字符串是句子,请不要在单词中间断开您的字符串。

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;
}
Run Code Online (Sandbox Code Playgroud)


Jes*_*mos 7

public string TruncString(string myStr, int THRESHOLD)
{
    if (myStr.Length > THRESHOLD)
        return myStr.Substring(0, THRESHOLD) + "...";
    return myStr;
}
Run Code Online (Sandbox Code Playgroud)

忽略命名约定,以防他实际需要THRESHOLD变量或者它总是相同的大小.

另外

string res = (myStr.Length > THRESHOLD) ? myStr.Substring(0, THRESHOLD) + ".." : myStr;
Run Code Online (Sandbox Code Playgroud)

  • 如果它在中间拆分代码点,这会产生无效的字符串:( (2认同)

Jon*_*Jon 5

这是一个说明椭圆长度的版本:

    public static string Truncate(this string value, int maxChars)
    {
        const string ellipses = "...";
        return value.Length <= maxChars ? value : value.Substring(0, maxChars - ellipses.Length) + ellipses;
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用省略号字符,则不需要。它的字符长度将始终为 1 `const char ellipse = (char)0x2026;` (5认同)