67 votes

Tronquer une chaîne sur des mots entiers dans .NET C #

J'essaie de tronquer un texte long en C #, mais je ne veux pas que ma chaîne soit coupée à mi-chemin d'un mot. Est-ce que quelqu'un a une fonction que je peux utiliser pour tronquer ma chaîne à la fin d'un mot?

Par exemple:

 "This was a long string..."
 

Ne pas:

 "This was a long st..."
 

99voto

Dave Points 6065

Essayez ce qui suit. C'est assez rudimentaire. Trouve juste le premier espace en partant de la longueur souhaitée.

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

88voto

TimS Points 2018

Merci pour votre réponse Dave. J'ai légèrement modifié la fonction et c'est ce que j'utilise ... sauf s'il y a d'autres commentaires;)

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

6voto

effkay Points 617

5voto

Contra Points 1996

Ma contribution:

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

C’est ce que j’utilise dans mes projets, avec le trailing facultatif. Le texte ne dépassera jamais les maxCharacters + fin du texte.

4voto

mlsteeves Points 1024

Si vous utilisez des formulaires Windows, dans la méthode Graphics.DrawString, il existe une option dans StringFormat pour spécifier si la chaîne doit être tronquée, si elle ne correspond pas à la zone spécifiée. Cela gérera l’ajout des points de suspension si nécessaire.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X