Ich möchte eine Erweiterungsmethode in die String
Klasse schreiben N
, damit nur die ersten N
Zeichen angezeigt werden , wenn die Eingabezeichenfolge länger als die angegebene Länge ist .
So sieht es aus:
public static string TruncateLongString(this string str, int maxLength)
{
if (str.Length <= maxLength)
return str;
else
//return the first maxLength characters
}
Mit welcher String.*()
Methode kann ich nur die ersten N
Zeichen von erhalten str
?
startIndex > (this.Length - length)
wirft einArgumentOutOfRangeException
.Math.Min(str.Length, maxLength) == str.Length
für den Fall, dass Sie eine unnötige Zeichenfolge erstellen, um "die ersten str.Length-Zeichen von str" zurückzugeben, aber Substring überprüft dies für Sie und nur,return this
wenn Sie nach der gesamten Zeichenfolge gefragt haben.Diese Lösung hat den winzigen Vorteil, dass wenn n größer als s.Length ist, sie immer noch das Richtige tut.
quelle
Sie können LINQ
str.Take(n)
oder verwendenstr.SubString(0, n)
, wobei letzteres eineArgumentOutOfRangeException
Ausnahme für auslöstn > str.Length
.Daran , dass die LINQ - Version eine gibt
IEnumerable<char>
, so würde man konvertieren dasIEnumerable<char>
zustring
:new string(s.Take(n).ToArray())
.quelle
Immer wenn ich String-Manipulationen in C # durchführen muss, vermisse ich die guten alten
Left
undRight
Funktionen von Visual Basic, die viel einfacher zu verwenden sind alsSubstring
.In den meisten meiner C # -Projekte erstelle ich Erweiterungsmethoden für sie:
Hinweis:
Der
Math.Min
Teil ist vorhanden, weil einSubstring
ausgelöst wird,ArgumentOutOfRangeException
wenn die Länge der Eingabezeichenfolge kleiner als die angeforderte Länge ist, wie bereits in einigen Kommentaren unter den vorherigen Antworten erwähnt.Verwendung:
quelle
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
muss auf null überprüft werdenEinfach:
quelle
quelle
str == null || str.Length <= maxLength
Remove
oder nichtSubstring
, gibt es keinen Unterschied.Remove(maxLength)
ruft nurSubstring(0,maxLength)
nach ein paar Grenzüberprüfungen an. Was Sie bevorzugen, hängt davon ab, ob Sie die Kürzung als "Nehmen Sie die ersten maxLength-Zeichen" oder "alles nach maxLength-Zeichen wegwerfen" betrachten. Natürlich ist es wirklich beides, also liegt es an dir.Wenn wir über Validierungen sprechen, warum wir nicht nach Null-String-Einträgen gesucht haben. Irgendwelche spezifischen Gründe?
Ich denke weiter unten helfen, da IsNullOrEmpty eine systemdefinierte Methode ist und ternäre Operatoren eine zyklomatische Komplexität = 1 haben, während if () {} else {} den Wert 2 hat.
quelle
Ich habe dies in mein Projekt aufgenommen, nur weil die Wahrscheinlichkeit, dass es in Schleifen verwendet wird, in einem online gehosteten Projekt hoch ist, daher wollte ich keine Abstürze, wenn ich es verwalten könnte. Die Länge passt zu einer Spalte, die ich habe. Es ist C # 7
Nur eine Zeile:
quelle
Die .NET-Teilstring-Methode ist mit Gefahren behaftet. Ich habe Erweiterungsmethoden entwickelt, die eine Vielzahl von Szenarien behandeln. Das Schöne ist, dass das ursprüngliche Verhalten beibehalten wird. Wenn Sie jedoch einen zusätzlichen "true" -Parameter hinzufügen, wird zur Behandlung der Ausnahme auf die Erweiterungsmethode zurückgegriffen und die logischsten Werte basierend auf Index und Länge zurückgegeben. Zum Beispiel, wenn die Länge negativ ist und rückwärts zählt. Sie können die Testergebnisse mit einer Vielzahl von Werten auf der Geige unter folgender Adresse anzeigen: https://dotnetfiddle.net/m1mSH9 . Auf diese Weise erhalten Sie eine klare Vorstellung davon, wie Teilzeichenfolgen aufgelöst werden.
Ich füge diese Methoden immer allen meinen Projekten hinzu und muss mich nie um das Brechen von Code kümmern, da sich etwas geändert hat und der Index ungültig ist. Unten ist der Code.
Ich habe bereits im Mai 2010 darüber gebloggt : http://jagdale.blogspot.com/2010/05/substring-extension-method-that-does.html
quelle
Teilweise aus Gründen der Zusammenfassung (ohne LINQ-Lösung) sind hier zwei Einzeiler aufgeführt, die sich mit der
int maxLength
Einschränkung befassen , negative Werte zuzulassen, sowie mit dem Fall einer Nullzeichenfolge:Substring
Weg (aus Paul Ruanes Antwort ):Remove
Weg (aus Kbrimingtons Antwort ):quelle
quelle
string.Substring (0, n); // 0 - Startindex und n - Anzahl der Zeichen
quelle