95 votes

Comment puis-je tronquer mes chaînes de caractères avec un "..." si elles sont trop longues ?

J'espère que quelqu'un a une bonne idée. J'ai des cordes comme ça :

abcdefg
abcde
abc

Ce dont j'ai besoin, c'est qu'ils soient trucidés pour s'afficher comme ça s'ils dépassent une longueur spécifiée :

abc ..
abc ..
abc

Existe-t-il un code C# simple que je puisse utiliser pour cela ?

166voto

Bryan Watts Points 22810

Voici la logique enveloppée dans une méthode d'extension :

public static string Truncate(this string value, int maxChars)
{
    return value.Length <= maxChars ? value : value.Substring(0, maxChars) + "...";
}

Utilisation :

var s = "abcdefg";

Console.WriteLine(s.Truncate(3));

11voto

JStevens Points 1583

Ce sont toutes de très bonnes réponses, mais pour clarifier un peu les choses, si vos chaînes sont des phrases, ne rompez pas votre chaîne au milieu d'un mot.

private string TruncateForDisplay(this string value, int length)
{
  if (string.IsNullOrEmpty(value)) return string.Empty;
  var returnValue = value;
  if (value.Length > length)
  {
    var tmp = value.Substring(0, length) ;
    if (tmp.LastIndexOf(' ') > 0)
       returnValue = tmp.Substring(0, tmp.LastIndexOf(' ') ) + " ...";
  }                
  return returnValue;
}

8voto

Jesus Ramos Points 15798
public string TruncString(string myStr, int THRESHOLD)
{
    if (myStr.Length > THRESHOLD)
        return myStr.Substring(0, THRESHOLD) + "...";
    return myStr;
}

Ignorez la convention d'appellation, c'est juste au cas où il aurait réellement besoin de la variable THRESHOLD ou si elle est toujours de la même taille.

Ou bien

string res = (myStr.Length > THRESHOLD) ? myStr.Substring(0, THRESHOLD) + ".." : myStr;

6voto

Jon Points 4583

Voici une version qui tient compte de la longueur des ellipses :

    public static string Truncate(this string value, int maxChars)
    {
        const string ellipses = "...";
        return value.Length <= maxChars ? value : value.Substring(0, maxChars - ellipses.Length) + ellipses;
    }

3voto

Bob Points 34449

Il n'y a pas de méthode intégrée dans le .NET Framework qui permette de le faire, mais il est très facile de l'écrire soi-même. Voici les étapes, essayez de la réaliser vous-même et faites-nous savoir ce que vous avez trouvé.

  1. Créez une méthode, peut-être un méthode d'extension public static void TruncateWithEllipsis(this string value, int maxLength)

  2. Vérifier si la valeur transmise est supérieure à la valeur de l'élément de données. maxLength spécifié à l'aide de l'option Length propriété . Si le value pas plus que maxLength il suffit de renvoyer le value .

  3. Si nous n'avons pas retourné la valeur transmise telle quelle, alors nous savons que nous devons la tronquer. Nous devons donc obtenir une section plus petite de la chaîne en utilisant la fonction SubString méthode . Cette méthode renvoie une section plus petite d'une chaîne de caractères en fonction d'une valeur de début et de fin spécifiée. La position de fin est celle qui a été transmise par la méthode maxLength alors utilisez-le.

  4. Renvoie la sous-section de la chaîne de caractères plus les ellipses.

Un bon exercice pour plus tard serait de mettre à jour la méthode et de faire en sorte qu'elle ne s'interrompe qu'après des mots complets. Vous pouvez également créer une surcharge pour spécifier comment vous souhaitez montrer qu'une chaîne a été tronquée. Par exemple, la méthode pourrait renvoyer " (cliquez pour en savoir plus)" au lieu de "..." si votre application est configurée pour afficher plus de détails en cliquant.

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