Je voudrais écrire une méthode d'extension à la String
classe afin que si la chaîne d'entrée est plus longue que la longueur fournie N
, seul le premierN
caractères doivent être affichés.
Voici à quoi cela ressemble:
public static string TruncateLongString(this string str, int maxLength)
{
if (str.Length <= maxLength)
return str;
else
//return the first maxLength characters
}
Quelle String.*()
méthode puis-je utiliser pour obtenir uniquement les premiers N
caractères de str
?
startIndex > (this.Length - length)
lance unArgumentOutOfRangeException
.Math.Min(str.Length, maxLength) == str.Length
au cas où vous finiriez par créer une chaîne inutile pour renvoyer "les premiers caractères str.Length de str", mais Substring fait cette vérification pour vous et le fait simplementreturn this
si vous avez demandé la chaîne entière.Cette solution a un petit avantage en ce que si n est supérieur à la longueur, elle fait toujours la bonne chose.
la source
Vous pouvez utiliser LINQ
str.Take(n)
oustr.SubString(0, n)
, où ce dernier lèvera uneArgumentOutOfRangeException
exception pourn > str.Length
.L' esprit que la version LINQ renvoie
IEnumerable<char>
, vous auriez donc avoir à convertir leIEnumerable<char>
àstring
:new string(s.Take(n).ToArray())
.la source
Chaque fois que je dois faire des manipulations de chaînes en C #, je manque le bon vieux
Left
et lesRight
fonctions de Visual Basic, qui sont beaucoup plus simples à utiliser queSubstring
.Donc, dans la plupart de mes projets C #, je crée des méthodes d'extension pour eux:
Remarque:
la
Math.Min
partie est là carSubstring
jette unArgumentOutOfRangeException
lorsque la longueur de la chaîne d'entrée est inférieure à la longueur demandée, comme déjà mentionné dans certains commentaires sous les réponses précédentes.Usage:
la source
public static string Left(this string str, int length) { var Result = str.Substring(0, Math.Min(length, str.Length)); return (Result.Length < length) ? Result.PadRight(length) : Result; }
str
doit être vérifié pour nullSimplement:
la source
la source
str == null || str.Length <= maxLength
Remove
ouSubstring
mieux, il n'y a pas de différence.Remove(maxLength)
appelle justeSubstring(0,maxLength)
après un peu de vérification des limites. Ce que vous préférez dépend de si vous pensez que la troncature est "prendre les premiers caractères maxLength" ou "tout jeter après les caractères maxLength". Bien sûr, c'est vraiment les deux, c'est donc à vous de décider.si nous parlons de validations, pourquoi nous n'avons pas vérifié les entrées de chaîne nulle. Des raisons spécifiques?
Je pense que ci-dessous aide car IsNullOrEmpty est une méthode définie par le système et les opérateurs ternaires ont une complexité cyclomatique = 1 tandis que if () {} else {} a la valeur 2.
la source
J'ai ajouté cela dans mon projet simplement parce que là où je l'utilise, il y a de fortes chances qu'il soit utilisé dans des boucles, dans un projet hébergé en ligne, donc je ne voulais pas de crash si je pouvais le gérer. La longueur correspond à une colonne que j'ai. C'est C # 7
Juste une ligne:
la source
La méthode .NET Substring est lourde de risques. J'ai développé des méthodes d'extension qui gèrent une grande variété de scénarios. La bonne chose est qu'il préserve le comportement d'origine, mais lorsque vous ajoutez un paramètre supplémentaire "true", il recourt ensuite à la méthode d'extension pour gérer l'exception et renvoie les valeurs les plus logiques, basées sur l'index et la longueur. Par exemple, si la longueur est négative et compte à rebours. Vous pouvez consulter les résultats des tests avec une grande variété de valeurs sur le violon à l' adresse : https://dotnetfiddle.net/m1mSH9 . Cela vous donnera une idée claire de la façon dont il résout les sous-chaînes.
J'ajoute toujours ces méthodes à tous mes projets et je n'ai jamais à me soucier de la rupture de code, car quelque chose a changé et l'index est invalide. Ci-dessous le code.
J'ai blogué à ce sujet en mai 2010 à l' adresse : http://jagdale.blogspot.com/2010/05/substring-extension-method-that-does.html
la source
En partie à des fins de récapitulation (à l'exclusion de la solution LINQ), voici deux one-liners qui adressent la
int maxLength
mise en garde d'autoriser des valeurs négatives et également le cas de la chaîne nulle:Substring
chemin (d'après la réponse de Paul Ruane ):Remove
chemin (d' après la réponse de Kbrimington ):la source
la source
string.Substring (0, n); // 0 - index de départ et n - nombre de caractères
la source