Angenommen, ich habe eine Zeichenfolge:
"34234234d124"
Ich möchte die letzten vier Zeichen dieser Zeichenfolge erhalten "d124"
. Ich kann verwenden SubString
, aber es braucht ein paar Codezeilen, einschließlich der Benennung einer Variablen.
Ist es möglich, dieses Ergebnis in einem Ausdruck mit C # zu erhalten?
4 > mystring.length ? mystring : mystring.Substring(mystring.length -4);
"hello world"[-4:]
. Ich hoffe, dass eine zukünftige Version von C # es so einfach macht."hello world"[^4..]
:-)Antworten:
Wenn Sie sicher sind, dass die Länge Ihrer Saite mindestens 4 beträgt, ist sie sogar noch kürzer:
quelle
mystring
es weniger als 4 Zeichen lang ist.Sie können eine Erweiterungsmethode verwenden :
Und dann anrufen:
quelle
Alles was du tun musst, ist..
quelle
Ok, ich sehe, dass dies ein alter Beitrag ist, aber warum schreiben wir Code neu, der bereits im Framework bereitgestellt wird?
Ich würde vorschlagen, dass Sie einen Verweis auf die Framework-DLL "Microsoft.VisualBasic" hinzufügen.
quelle
VisualBasic
Namespace verschoben ?TextFieldParser
ist ein weiteres Beispiel. Warum werden diese Dienstprogramme so seltsam berücksichtigt?quelle
Die Verwendung von Teilzeichenfolgen ist eigentlich recht kurz und lesbar:
quelle
Hier ist eine weitere Alternative, die (aufgrund der verzögerten Ausführung ) nicht zu schlecht abschneiden sollte :
new string(mystring.Reverse().Take(4).Reverse().ToArray());
Obwohl eine Erweiterungsmethode für diesen Zweck
mystring.Last(4)
eindeutig die sauberste Lösung ist, wenn auch etwas mehr Arbeit.quelle
Reverse().Take(4).Reverse()
nicht jeder die gesamte Zeichenfolge auflistet , sondern nur beim letztenToArray
Aufruf. Wenn es keine verzögerte Ausführung gäbe, würde dies bedeutenReverse().ToArray().Take(4).ToArray().Reverse().ToArray()
. Dies setzt natürlich voraus, dass es sich bei diesen Erweiterungen um den verzögerten Typ handelt - den ich nicht überprüft habe. Die String-Konstruktoren akzeptieren IEnumerable nicht, daher müssen Sie es zu diesem Zeitpunkt in ein Array auflisten.Sie können einfach die
Substring
Methode von C # verwenden. Zum Beispiel.Es wird das Ergebnis 0000 zurückgegeben.
quelle
startIndex
?Eine einfache Lösung wäre:
quelle
quelle
=
nicht gemeint=+
.Es ist nur das:
quelle
Im Vergleich zu einigen früheren Antworten besteht der Hauptunterschied darin, dass dieser Code berücksichtigt, wenn die Eingabezeichenfolge lautet:
Hier ist es:
quelle
Definition:
Verwendungszweck:
Ergebnis:
von
quelle
Dies wird für keine Länge Zeichenfolge fehlschlagen.
Dies ist wahrscheinlich ein Overkill für die jeweilige Aufgabe, aber wenn eine zusätzliche Validierung erforderlich ist, kann sie möglicherweise dem regulären Ausdruck hinzugefügt werden.
Edit: Ich denke, dieser Regex wäre effizienter:
quelle
Verwenden Sie ein Generikum
Last<T>
. Das funktioniert mit JEDEMIEnumerable
, einschließlich String.Und eine spezielle für String:
quelle
Ich habe einen Code zusammengestellt, der aus verschiedenen Quellen modifiziert wurde, um die gewünschten Ergebnisse zu erzielen und außerdem noch viel mehr zu tun. Ich habe negative int-Werte zugelassen, int-Werte, die die Länge der Zeichenfolge überschreiten, und einen Endindex, der kleiner als der Startindex ist. In diesem letzten Fall gibt die Methode einen Teilstring in umgekehrter Reihenfolge zurück. Es gibt viele Kommentare, aber lassen Sie mich wissen, wenn etwas unklar oder einfach nur verrückt ist. Ich habe damit herumgespielt, um zu sehen, wofür ich es nur verwenden könnte.
Wenn Sie also eine Zeichenfolge wie "Dies ist eine Erweiterungsmethode" haben, sind hier einige Beispiele und Ergebnisse zu erwarten.
Hoffentlich ist diese Version für jemanden hilfreich. Es funktioniert wie gewohnt, wenn Sie keine negativen Zahlen verwenden, und bietet Standardeinstellungen für Parameter außerhalb des Bereichs.
quelle
quelle
Angenommen, Sie möchten die Zeichenfolgen zwischen einer Zeichenfolge, die 10 Zeichen vom letzten Zeichen entfernt ist, und Sie benötigen nur 3 Zeichen.
Sagen wir
StreamSelected = "rtsp://72.142.0.230:80/SMIL-CHAN-273/4CIF-273.stream"
Oben muss ich das extrahieren, das
"273"
ich in der Datenbankabfrage verwenden werdequelle
Substring
können Sie bereits einen Startpunkt und eine Länge übergeben, sodass Sie nicht sicher sind, warum Sie dies nicht verwenden würden, anstattRemove
zuerst den Anfang zu entfernen.Update 2020 : C # 8.0 macht dies endlich einfach:
Auf die gleiche Weise können Sie auch Arrays in Scheiben schneiden, siehe Indizes und Bereiche .
quelle