J'aimerais écrire une méthode d'extension dans la classe String
de sorte que, si la chaîne d'entrée est plus longue que la longueur fournie N
, seuls les premiers N
caractères soient affichés.
Voici à quoi ça ressemble:
public static string TruncateLongString(this string str, int maxLength)
{
if (str.Length <= maxLength)
return str;
else
//return the first maxLength characters
}
Quelle méthode String.*()
puis-je utiliser pour obtenir uniquement les premiers N
caractères de str
?
public static string TruncateLongString(this string str, int maxLength)
{
if (string.IsNullOrEmpty(str))
return str;
return str.Substring(0, Math.Min(str.Length, maxLength));
}
string truncatedToNLength = new string(s.Take(n).ToArray());
Cette solution a un bonus minime en ce que si n est supérieur à la longueur, il fait toujours la bonne chose.
Vous pouvez utiliser LINQ str.Take(n)
ou str.SubString(0, n)
, ce dernier émettant une exception ArgumentOutOfRangeException
pour n > str.Length
.
Notez que la version de LINQ renvoie un IEnumerable<char>
, vous devrez donc convertir le IEnumerable<char>
en string
: new string(s.Take(n).ToArray())
.
Chaque fois que je dois effectuer des manipulations de chaîne en C #, les bonnes vieilles fonctions Left
et Right
de Visual Basic me manquent, qui sont beaucoup plus simples à utiliser que Substring
.
Donc, dans la plupart de mes projets C #, je crée des méthodes d'extension pour eux:
public static class StringExtensions
{
public static string Left(this string str, int length)
{
return str.Substring(0, Math.Min(length, str.Length));
}
public static string Right(this string str, int length)
{
return str.Substring(str.Length - Math.Min(length, str.Length));
}
}
Remarque:
La partie Math.Min
est présente car Substring
lève un ArgumentOutOfRangeException
lorsque la longueur de la chaîne d'entrée est inférieure à la longueur demandée, comme déjà mentionné dans certains commentaires des réponses précédentes.
string longString = "Long String";
// returns "Long";
string left1 = longString.Left(4);
// returns "Long String";
string left2 = longString.Left(100);
Simplement:
public static String Truncate(String input,int maxLength)
{
if(input.Length > maxLength)
return input.Substring(0,maxLength);
return input;
}
public static string TruncateLongString(this string str, int maxLength)
{
return str.Length <= maxLength ? str : str.Remove(maxLength);
}
si nous parlons de validations, pourquoi n’avons-nous pas vérifié les entrées nuls? Des raisons spécifiques?
Je pense en-dessous de l'aide, car IsNullOrEmpty est une méthode définie par le système et les opérateurs ternaires ont une complexité cyclomatique = 1 alors que si () {} else {} a la valeur 2.
public static string Truncate(string input, int truncLength)
{
return (!String.IsNullOrEmpty(input) && input.Length >= truncLength)
? input.Substring(0, truncLength)
: input;
}
J'ai ajouté cela dans mon projet simplement parce que là où je l'utilise, il y a de grandes chances qu'il soit utilisé dans des boucles, dans un projet hébergé en ligne, je ne voulais donc pas de crash si je pouvais le gérer. La longueur correspond à une colonne que j'ai. C'est C # 7
Juste une ligne:
public static string SubStringN(this string Message, int Len = 499) => !String.IsNullOrEmpty(Message) ? (Message.Length >= Len ? Message.Substring(0, Len) : Message) : "";
substring(int startpos, int lenght);