使用C#进行省略(以完整单词结尾)

我正在尝试在Umbraco中实现省略号,要求是15个字符的介绍文本,但总是以一个完整的单词结束。

我想过使用XSLT,但后来意识到我可以使用一个用C#编写的简单扩展方法。

我可以很容易地对文本进行子串并追加“…”,但是我不得不用一个完整的单词来结束它。这是我的代码到目前为止(非常复杂:p)

public string Ellipsis(string text, int length) { return text.Substring(0, length) + "..."; } 

示例文本

Lorem ipsum dolor坐在amet,amet consectetur adipiscing elit。

如果我们实现上面的省略号方法(长度= 15),输出看起来像

Lorem ipsum dolor sit amet,amet consectetur adipi …

我想确保没有任何单词被切片,所以输出应该是这样的

Lorem ipsum dolor坐在amet,amet consectetur adipiscing …

任何帮助赞赏。

编辑

运行下面代码的示例后,如果省略号长度在最后一个单词上结束,则根本不显示任何文本。

这是输出,见第56-60行

 0 : Lorem... 1 : Lorem... 2 : Lorem... 3 : Lorem... 4 : Lorem... 5 : Lorem... 6 : Lorem ipsum... 7 : Lorem ipsum... 8 : Lorem ipsum... 9 : Lorem ipsum... 10 : Lorem ipsum... 11 : Lorem ipsum... 12 : Lorem ipsum dolor... 13 : Lorem ipsum dolor... 14 : Lorem ipsum dolor... 15 : Lorem ipsum dolor... 16 : Lorem ipsum dolor... 17 : Lorem ipsum dolor... 18 : Lorem ipsum dolor sit... 19 : Lorem ipsum dolor sit... 20 : Lorem ipsum dolor sit... 21 : Lorem ipsum dolor sit... 22 : Lorem ipsum dolor sit amet,... 23 : Lorem ipsum dolor sit amet,... 24 : Lorem ipsum dolor sit amet,... 25 : Lorem ipsum dolor sit amet,... 26 : Lorem ipsum dolor sit amet,... 27 : Lorem ipsum dolor sit amet,... 28 : Lorem ipsum dolor sit amet, amet... 29 : Lorem ipsum dolor sit amet, amet... 30 : Lorem ipsum dolor sit amet, amet... 31 : Lorem ipsum dolor sit amet, amet... 32 : Lorem ipsum dolor sit amet, amet... 33 : Lorem ipsum dolor sit amet, amet consectetur... 34 : Lorem ipsum dolor sit amet, amet consectetur... 35 : Lorem ipsum dolor sit amet, amet consectetur... 36 : Lorem ipsum dolor sit amet, amet consectetur... 37 : Lorem ipsum dolor sit amet, amet consectetur... 38 : Lorem ipsum dolor sit amet, amet consectetur... 39 : Lorem ipsum dolor sit amet, amet consectetur... 40 : Lorem ipsum dolor sit amet, amet consectetur... 41 : Lorem ipsum dolor sit amet, amet consectetur... 42 : Lorem ipsum dolor sit amet, amet consectetur... 43 : Lorem ipsum dolor sit amet, amet consectetur... 44 : Lorem ipsum dolor sit amet, amet consectetur... 45 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 46 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 47 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 48 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 49 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 50 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 51 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 52 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 53 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 54 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 55 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 56 : ... 57 : ... 58 : ... 59 : ... 60 : ... 61 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 62 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 63 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 64 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 65 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 66 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 67 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 68 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 69 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 70 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 71 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 72 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 73 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 74 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 75 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 76 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 77 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 78 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 79 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit. 

马尔科

 if (text.Length <= length) return text; int pos = text.IndexOf(" ", length) ; if (pos >= 0) return text.Substring(0, pos) + "..."; return text; 

编辑:这是我测试过的程序:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { for (int i = 0; i < 40; ++i) { string s = Ellipsis("Lorem ipsum dolor sit amet, amet consectetur adipiscing elit.", i); Console.WriteLine("{0} : {1}", i, s); } } static public string Ellipsis(string text, int length) { if (text.Length <= length) return text; int pos = text.IndexOf(" ", length) ; if (pos >= 0) return text.Substring(0, pos) + "..."; return text; } } } 

这是输出:

 0 : Lorem... 1 : Lorem... 2 : Lorem... 3 : Lorem... 4 : Lorem... 5 : Lorem... 6 : Lorem ipsum... 7 : Lorem ipsum... 8 : Lorem ipsum... 9 : Lorem ipsum... 10 : Lorem ipsum... 11 : Lorem ipsum... 12 : Lorem ipsum dolor... 13 : Lorem ipsum dolor... 14 : Lorem ipsum dolor... 15 : Lorem ipsum dolor... 16 : Lorem ipsum dolor... 17 : Lorem ipsum dolor... 18 : Lorem ipsum dolor sit... 19 : Lorem ipsum dolor sit... 20 : Lorem ipsum dolor sit... 21 : Lorem ipsum dolor sit... 22 : Lorem ipsum dolor sit amet,... 23 : Lorem ipsum dolor sit amet,... 24 : Lorem ipsum dolor sit amet,... 25 : Lorem ipsum dolor sit amet,... 26 : Lorem ipsum dolor sit amet,... 27 : Lorem ipsum dolor sit amet,... 28 : Lorem ipsum dolor sit amet, amet... 29 : Lorem ipsum dolor sit amet, amet... 30 : Lorem ipsum dolor sit amet, amet... 31 : Lorem ipsum dolor sit amet, amet... 32 : Lorem ipsum dolor sit amet, amet... 33 : Lorem ipsum dolor sit amet, amet consectetur... 34 : Lorem ipsum dolor sit amet, amet consectetur... 35 : Lorem ipsum dolor sit amet, amet consectetur... 36 : Lorem ipsum dolor sit amet, amet consectetur... 37 : Lorem ipsum dolor sit amet, amet consectetur... 38 : Lorem ipsum dolor sit amet, amet consectetur... 39 : Lorem ipsum dolor sit amet, amet consectetur... 

我想提供一个替代实现,因为Preet给出的代码不能确保最大文本长度。 我必须实现一个单词省略号函数,它返回一个硬长度有限的文本字省略号修剪。 另外,在省略号之前也会修剪标点符号。

 public class WordProcessing { static public string WordEllipsis(string text, int maxLength, string ellipsis = "...") { string result; if (text.Length <= maxLength) { result = text; } else if (maxLength <= ellipsis.Length) { result = ellipsis.Substring(0, maxLength); } else { result = text.Substring(0, maxLength - ellipsis.Length); var lastWordPosition = result.LastIndexOf(' '); if (lastWordPosition < 0) { lastWordPosition = 0; } result = result.Substring(0, lastWordPosition).Trim(new[] { '.', ',', '!', '?' }) + ellipsis; } return result; } } 

unit testing - 作为魅力。

输出:

 0 : 1 : . 2 : .. 3 : ... 4 : ... 5 : ... 6 : ... 7 : ... 8 : ... 9 : Lorem... 10 : Lorem... 11 : Lorem... 12 : Lorem... 13 : Lorem... 14 : Lorem... 15 : Lorem ipsum... 16 : Lorem ipsum... 17 : Lorem ipsum... 18 : Lorem ipsum... 19 : Lorem ipsum... 20 : Lorem ipsum... 21 : Lorem ipsum dolor... 22 : Lorem ipsum dolor... 23 : Lorem ipsum dolor... 24 : Lorem ipsum dolor... 25 : Lorem ipsum dolor sit... 26 : Lorem ipsum dolor sit... 27 : Lorem ipsum dolor sit... 28 : Lorem ipsum dolor sit... 29 : Lorem ipsum dolor sit... 30 : Lorem ipsum dolor sit... 31 : Lorem ipsum dolor sit amet... 32 : Lorem ipsum dolor sit amet... 33 : Lorem ipsum dolor sit amet... 34 : Lorem ipsum dolor sit amet... 35 : Lorem ipsum dolor sit amet... 36 : Lorem ipsum dolor sit amet, amet... 37 : Lorem ipsum dolor sit amet, amet... 38 : Lorem ipsum dolor sit amet, amet... 39 : Lorem ipsum dolor sit amet, amet... 40 : Lorem ipsum dolor sit amet, amet... 41 : Lorem ipsum dolor sit amet, amet... 42 : Lorem ipsum dolor sit amet, amet... 43 : Lorem ipsum dolor sit amet, amet... 44 : Lorem ipsum dolor sit amet, amet... 45 : Lorem ipsum dolor sit amet, amet... 46 : Lorem ipsum dolor sit amet, amet... 47 : Lorem ipsum dolor sit amet, amet... 48 : Lorem ipsum dolor sit amet, amet consectetur... 49 : Lorem ipsum dolor sit amet, amet consectetur... 50 : Lorem ipsum dolor sit amet, amet consectetur... 51 : Lorem ipsum dolor sit amet, amet consectetur... 52 : Lorem ipsum dolor sit amet, amet consectetur... 53 : Lorem ipsum dolor sit amet, amet consectetur... 54 : Lorem ipsum dolor sit amet, amet consectetur... 55 : Lorem ipsum dolor sit amet, amet consectetur... 56 : Lorem ipsum dolor sit amet, amet consectetur... 57 : Lorem ipsum dolor sit amet, amet consectetur... 58 : Lorem ipsum dolor sit amet, amet consectetur... 59 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 60 : Lorem ipsum dolor sit amet, amet consectetur adipiscing... 61 : Lorem ipsum dolor sit amet, amet consectetur adipiscing elit.