代码之家  ›  专栏  ›  技术社区  ›  Marko

带C#的省略号(以全字结尾)

  •  8
  • Marko  · 技术社区  · 14 年前

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

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

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

    示例文本

    Lorem ipsum悲哀地坐在amet,amet concetetur adipising elit。

    如果我们实现上面的省略号方法(length=15),那么输出将如下所示

    我想确保没有单词被切分,所以输出应该是

    Lorem ipsum悲哀地坐在amet,amet concetetur adipising。。。

    谢谢你的帮助。

    编辑

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

    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.
    

    2 回复  |  直到 14 年前
        1
  •  20
  •   Preet Sangha    14 年前
    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...
    
        2
  •  3
  •   Lars    11 年前

    我想给出另一种实现方式,因为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;
        }
    }
    

    单元测试-作为一种魅力。

    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.