Ellipsis with C# (ending on a full word)

后端 未结 2 1405
北恋
北恋 2021-01-12 06:51

I\'m trying to implement ellipsis in Umbraco, the requirement being 15 characters of intro text but always ending on a full word.

I thought of using XSLT, but then r

相关标签:
2条回答
  • 2021-01-12 07:06
    if (text.Length <= length) return text;
    int pos = text.IndexOf(" ", length) ;
    if (pos >= 0)
        return text.Substring(0, pos) + "...";
    return text;
    

    Edit: This is the program I tested it with:

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

    Here is output:

    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...
    
    0 讨论(0)
  • 2021-01-12 07:11

    I want to give an alternative implemenation because the code given by Preet does not ensure a maximum text length. I had to implement a word ellipsis function that returns a hard length limited text word ellipsis trimming. Additionally punctuation marks are also trimmed just before the ellipsis.

    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 tested - works as a charm.

    Output:

    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.
    
    0 讨论(0)
提交回复
热议问题