Wie trenne ich eine .NET-Zeichenfolge?
Ich würde gerne abschneiden einer Zeichenfolge, so dass seine Länge nicht mehr als einen bestimmten Wert. Ich Schreibe, um eine Datenbank-Tabelle und möchten sicherstellen, dass die Werte Schreibe ich treffe die Einschränkung der Spalte Datentyp.
Zum Beispiel, wäre es schön, wenn ich schreiben könnte Sie Folgendes:
string NormalizeLength(string value, int maxLength)
{
return value.Substring(0, maxLength);
}
Leider, dies wirft eine Ausnahme, weil maxLength
im Allgemeinen überschreitet die Grenzen der string value
. Natürlich, ich könnte eine Funktion schreiben, die wie die folgenden, aber ich hatte gehofft, dass so etwas bereits existiert.
string NormalizeLength(string value, int maxLength)
{
return value.Length <= maxLength ? value : value.Substring(0, maxLength);
}
Wo ist die schwer fassbare API, führt diese Aufgabe aus? Gibt es eine?
InformationsquelleAutor der Frage Steve Guidi | 2010-05-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es nicht eine
Truncate()
Methode auf string, leider. Sie haben zu schreiben, diese Art von Logik selbst. Was Sie jedoch tun können, ist, wickeln Sie diesen in eine extension-Methode, so dass Sie nicht haben, um es zu duplizieren überall:Nun können wir schreiben:
InformationsquelleAutor der Antwort LBushkin
Oder statt des ternären operator, den Sie verwenden konnten, Math.min
InformationsquelleAutor der Antwort CaffGeek
Ich dachte, ich würde werfen in meiner Umsetzung, da ich glaube, es betrifft alle die Fälle, die berührt wurden, auf die anderen und tut so, kurz und bündig, das ist noch lesbar.
Diese Lösung vor allem baut auf dem Ray ' s Lösung und öffnet die Methode für die Verwendung als Erweiterung Methode, indem Sie die diese Schlüsselwort nur als LBushkin hat in seine Lösung.
InformationsquelleAutor der Antwort jpierson
Könnte man mit LINQ... es eliminiert die Notwendigkeit, überprüfen Sie die string-Länge. Zugegebenermaßen vielleicht nicht die effizienteste, aber es macht Spaß.
oder
InformationsquelleAutor der Antwort tames
In .NET 4.0 können Sie die
Take
Methode:Nicht getestet für Effizienz!
InformationsquelleAutor der Antwort Dylan Nicholson
Den .NET-Framework bietet eine API zum abschneiden einer Zeichenfolge wie diese:
Aber in einer C# - app, auf die Sie wohl lieber roll your own, als sich eine Abhängigkeit Microsoft.VisualBasic.dll, deren wichtigste raison d ' etre ist die Abwärtskompatibilität.
InformationsquelleAutor der Antwort Joe
Scheint niemand gepostet hat, dies noch:
Mit && - operator macht es geringfügig besser als die akzeptierte Antwort.
InformationsquelleAutor der Antwort Darren
Da die Leistung testen Spaß macht: (mit linqpad-Erweiterung Methoden)
Den
truncate
Methode war "deutlich" schneller. #microoptimizationFrühen
Spät
Zu Lange
InformationsquelleAutor der Antwort drzaus
Ich habe mir in einer Zeile in der Art, wie diese
InformationsquelleAutor der Antwort SeanKPS
Eine ähnliche Variante mit C# 6 ist Null propagation operator
Bitte beachten Sie, wir sind im wesentlichen der überprüfung, ob
value
null ist zweimal hier.InformationsquelleAutor der Antwort Jamie Rees
Unter @CaffGeek und es zu vereinfachen:
InformationsquelleAutor der Antwort Edwin Beltran
Kndly beachten Sie, dass das abschneiden einer Zeichenfolge nicht nur bedeutet, justing schneiden einen string auf eine angegebene Länge allein, sondern muss aufpassen, nicht zu Spalten, das Wort.
z.B. string : dies ist ein test-string.
Will ich Schnitt es am 11 . Wenn wir verwenden die Methode, die oben gegeben wird das Ergebnis
dies ist ein te
Dies ist nicht das, was wir wollen,
Die Methode, die ich benutze, kann auch nicht so perfekt, aber es kann mit den meisten die situation
InformationsquelleAutor der Antwort Sen K. Mathew
Ich weiß, das ist eine alte Frage, aber hier ist eine schöne Lösung:
Zurück: Hallo...
InformationsquelleAutor der Antwort nologo
Immer noch keine Truncate-Methode im Jahr 2016 für C# - strings.
Aber - Mit C# 6.0 Syntax:
Es funktioniert wie ein Charme:
InformationsquelleAutor der Antwort Tobias Schiele
Nur für den Fall, dass es nicht genügend Antworten hier, hier ist meins 🙂
verwenden:
InformationsquelleAutor der Antwort K. R.
Warum nicht:
D. H. im Falle
value.Length < maxLength
pad Leerzeichen am Ende oder kürzen Sie die überschüssige.InformationsquelleAutor der Antwort Sri
Für den Willen des (über -) Komplexität, werde ich meine überladene version ersetzt die letzten 3 Zeichen mit einem Auslassungszeichen im Hinblick auf den maxLength-parameter.
InformationsquelleAutor der Antwort SoftDev
Ich lieber jpierson Antwort, aber keines der Beispiele hier, die ich sehen kann sind im Umgang mit einem ungültigen maxLength-parameter, wie wenn maxLength < 0.
Wahl wäre entweder behandeln Sie die Fehler in einem try/catch, clamp den maxLength-parameter min 0, oder, wenn maxLength ist weniger als 0, wird ein leerer string zurückgegeben.
Nicht optimiertem code:
InformationsquelleAutor der Antwort deegee
Hier ist ein vb.net Lösung markieren, wenn die (obwohl hässlich) - Anweisung verbessert die Leistung, weil wir das nicht tun, müssen Sie die substring-Anweisung als string ist bereits kleiner als maxlength...
Indem es eine Erweiterung um string-es ist einfach zu bedienen...
InformationsquelleAutor der Antwort Jeroen Bom
Ich weiß es gibt eine Tonne von Antworten schon, aber mein Bedürfnis zu halten war der Anfang und das Ende des Strings intakt, sondern es verkürzen, um unter die max Länge.
Dies ist für die Erstellung von SharePoint-URLs haben eine maximale Länge von 260 Zeichen.
Ich nicht die Länge eines Parameters, da es eine Konstante 260. Ich habe auch nicht die erste, die substring-Länge parameter, weil ich will, es zu brechen an einem bestimmten Punkt. Schließlich, der zweiten Teilzeichenfolge ist die Länge der Quell - 20 da ich weiß, dass die Ordner-Struktur.
Diese könnten sich leicht an Ihre spezifischen Bedürfnisse.
InformationsquelleAutor der Antwort Paul Haan
TruncateString
InformationsquelleAutor der Antwort Sud
Ich würde Empfehlen, mit der substring-Methode für die gleiche effektive Funktionalität.
Dies hat den Vorteil, dass Sie splice Ihren string aus entweder seitlich oder sogar irgendwo in der Mitte ohne das schreiben von zusätzlichen Methoden. Hoffe, das hilft 🙂
Weitere Referenz: https://www.dotnetperls.com/substring
InformationsquelleAutor der Antwort SethMartn
Ich weiß es gibt eine Tonne von Antworten hier schon, aber das ist der, den ich gegangen mit, die beiden Griffe null-Zeichenfolgen und die situation, wo die Länge wird übergeben negativ:
InformationsquelleAutor der Antwort Ed B
Gibt es nichts .net für das, dass ich mir bewusst bin - hier ist meine version, die hinzufügt:"...":
InformationsquelleAutor der Antwort Ray
InformationsquelleAutor der Antwort TapiocaCom
Abschneiden, String
InformationsquelleAutor der Antwort V.T.
Dies ist der code, den ich normalerweise verwende:
InformationsquelleAutor der Antwort user3390116