截断string在.NET中的整个单词C#

我试图截断C#中的一些长文本,但我不希望我的string被切断一半的一个字。 有没有人有一个function,我可以用来截断我的string在一个字的末尾?

例如:

"This was a long string..." 

不:

 "This was a long st..." 

尝试以下。 这是相当简单的。 只要find所需长度的第一个空间。

 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)); } 

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

 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()); } 

我的贡献:

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

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

如果使用Windows窗体,则在Graphics.DrawString方法中,StringFormat中有一个选项可以指定是否应该截断string,如果不适合指定的区域。 这将根据需要处理添加省略号。

http://msdn.microsoft.com/en-us/library/system.drawing.stringtrimming.aspx

我进一步采取了你的方法:

 public string TruncateAtWord(string value, int length) { if (value == null || value.Trim().Length <= length) return value; int index = value.Trim().LastIndexOf(" "); while ((index + 3) > length) index = value.Substring(0, index).Trim().LastIndexOf(" "); if (index > 0) return value.Substring(0, index) + "..."; return value.Substring(0, length - 3) + "..."; } 

我正在使用这个来截断推文。

简化,增加了中继字符选项,并将其作为扩展。

  public static string TruncateAtWord(this string value, int maxLength) { if (value == null || value.Trim().Length <= maxLength) return value; string ellipse = "..."; char[] truncateChars = new char[] { ' ', ',' }; int index = value.Trim().LastIndexOfAny(truncateChars); while ((index + ellipse.Length) > maxLength) index = value.Substring(0, index).Trim().LastIndexOfAny(truncateChars); if (index > 0) return value.Substring(0, index) + ellipse; return value.Substring(0, maxLength - ellipse.Length) + ellipse; } 

下面是我想出来的。 这是为了让句子的其余部分也分块。

 public static List<string> SplitTheSentenceAtWord(this string originalString, int length) { try { List<string> truncatedStrings = new List<string>(); if (originalString == null || originalString.Trim().Length <= length) { truncatedStrings.Add(originalString); return truncatedStrings; } int index = originalString.Trim().LastIndexOf(" "); while ((index + 3) > length) index = originalString.Substring(0, index).Trim().LastIndexOf(" "); if (index > 0) { string retValue = originalString.Substring(0, index) + "..."; truncatedStrings.Add(retValue); string shortWord2 = originalString; if (retValue.EndsWith("...")) { shortWord2 = retValue.Replace("...", ""); } shortWord2 = originalString.Substring(shortWord2.Length); if (shortWord2.Length > length) //truncate it further { List<string> retValues = SplitTheSentenceAtWord(shortWord2.TrimStart(), length); truncatedStrings.AddRange(retValues); } else { truncatedStrings.Add(shortWord2.TrimStart()); } return truncatedStrings; } var retVal_Last = originalString.Substring(0, length - 3); truncatedStrings.Add(retVal_Last + "..."); if (originalString.Length > length)//truncate it further { string shortWord3 = originalString; if (originalString.EndsWith("...")) { shortWord3 = originalString.Replace("...", ""); } shortWord3 = originalString.Substring(retVal_Last.Length); List<string> retValues = SplitTheSentenceAtWord(shortWord3.TrimStart(), length); truncatedStrings.AddRange(retValues); } else { truncatedStrings.Add(retVal_Last + "..."); } return truncatedStrings; } catch { return new List<string> { originalString }; } } 

这个解决scheme也起作用(从myString开始,前10个单词):

 String.Join(" ", myString.Split(' ').Take(10)) 

我用这个

 public string Truncate(string content, int length) { try { return content.Substring(0,content.IndexOf(" ",length)) + "..."; } catch { return content; } }