在.NET C#中截断整个单词的字符串

Tim*_*imS 62 .net c# string truncate

我试图在C#中截断一些长文本,但我不希望我的字符串在一个单词中被切断.有没有人有一个我可以用来截断单词结尾的字符串的函数?

例如:

"This was a long string..."
Run Code Online (Sandbox Code Playgroud)

不:

"This was a long st..."
Run Code Online (Sandbox Code Playgroud)

Dav*_*ave 92

请尝试以下方法.这是非常简陋的.只需找到以所需长度开始的第一个空格.

public static string TruncateAtWord(this string value, int length) {
    if (value == null || value.Length < length || value.IndexOf(" ", length) == -1)
        return value;

    return value.Substring(0, value.IndexOf(" ", length));
}
Run Code Online (Sandbox Code Playgroud)

  • 完善!而不是一个正则表达式:) (15认同)
  • 在所需的长度之前找到第一个空间可能是有意义的吗?否则,你必须猜测所需的长度是多少? (5认同)
  • 不使用正则表达式也应该是 -1 ;) (2认同)
  • 我不同意使用缩写“str”——我认为缩写总是会使代码的可读性降低。+1 表示评论使用“值”。 (2认同)

Tim*_*imS 81

谢谢你的回答戴夫.我已经调整了一下这个函数,这就是我正在使用的...除非有更多的评论;)

public static string TruncateAtWord(this string input, int length)
{
    if (input == null || input.Length < length)
        return input;
    int iNextSpace = input.LastIndexOf(" ", length, StringComparison.Ordinal);
    return string.Format("{0}…", input.Substring(0, (iNextSpace > 0) ? iNextSpace : length).Trim());
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此方法查找第一个空格*AFTER*指定的长度值,几乎总是导致结果字符串长于值.要查找长度之前的最后一个空格,只需在计算`iNextSpace`时替换`input.LastIndexOf("",length)`. (7认同)
  • 您可以添加省略号字符.'...' (6认同)
  • 除此之外,我现在还在调用另一个字符串实用程序函数,它会删除任何HTML标记(使用RegEx).这样可以最大限度地减少因截断而导致HTML损坏的风险,因为所有字符串都是纯文本格式. (3认同)
  • 对CBono的评论+100 - 这需要在此之前!如果你觉得很长,那么你会发现每一个都超过你想要的长度! (3认同)
  • 在第5行,我建议使用:`int iNextSpace = input.LastIndexOf("",length,System.StringComparison.Ordinal);`for language specific characters (2认同)

Con*_*tra 5

我的贡献:

public static string TruncateAtWord(string text, int maxCharacters, string trailingStringIfTextCut = "&hellip;")
{
    if (text == null || (text = text.Trim()).Length <= maxCharacters) 
      return text;

    int trailLength = trailingStringIfTextCut.StartsWith("&") ? 1 
                                                              : trailingStringIfTextCut.Length; 
    maxCharacters = maxCharacters - trailLength >= 0 ? maxCharacters - trailLength 
                                                     : 0;
    int pos = text.LastIndexOf(" ", maxCharacters);
    if (pos >= 0)
        return text.Substring(0, pos) + trailingStringIfTextCut;

    return string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

这是我在我的项目中使用的,具有可选的尾随.文本永远不会超过maxCharacters +尾随文本长度.