Holen Sie sich alle Zeichen rechts vom letzten Strich


114

Ich habe folgendes:

string test = "9586-202-10072"

Wie würde ich alle Zeichen rechts vom Finale -so 10072 bekommen. Die Anzahl der Zeichen unterscheidet sich immer rechts vom letzten Strich.

Wie kann das gemacht werden?

Antworten:


235

Sie können die Position des letzten -mit erhalten str.LastIndexOf('-'). Der nächste Schritt liegt also auf der Hand:

var result = str.Substring(str.LastIndexOf('-') + 1);

Korrektur :

Wie Brian weiter unten ausführt, führt die Verwendung dieser Zeichenfolge für eine Zeichenfolge ohne Bindestriche dazu, dass dieselbe Zeichenfolge zurückgegeben wird.


1
Dies funktioniert auch dann, wenn der Bindestrich das letzte Zeichen ist. In diesem Fall wird eine leere Zeichenfolge korrekt zurückgegeben. Dies strschlägt nur fehl, wenn entweder null ist oder überhaupt keinen Bindestrich enthält. (In dem Fall, in dem es keinen Bindestrich gibt, wird nicht geworfen; es wird die gesamte
Quellzeichenfolge zurückgegeben

@ LukeH: Danke für das Heads Up. Ich habe nicht nachgesehen und fälschlicherweise angenommen, dass es werfen würde.
Jon

3
Nun, LastIndexOf-1 , wenn nichts gefunden wird (dieses Verhalten dokumentiert ist, so dass es sicher ist darauf zu verlassen). str.Substring(1-1)gibt Ihnen eine Zeichenfolge gleich str. Keine Überraschungen hier.
Brian

2
@Brian: Ich glaube, ich habe meinen Rekord für die meisten Fehler in derselben trivialen Aussage gebrochen. Lektion: Schreiben Sie niemals etwas, ohne den Code nachträglich Korrektur zu lesen. Vielen Dank.
Jon

57

Sie könnten LINQ verwenden und sich das explizite Parsen ersparen:

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);

5
Dies spart wahrscheinlich die meiste Entwicklerzeit, aber im allgemeinen Fall ist zu beachten, dass Code wie dieser viele Zeichenfolgenzuweisungen enthält (wahrscheinlich vier im obigen Beispiel), sodass er in leistungskritischen Abschnitten möglicherweise nicht besonders hervorgehoben wird.
Charles Burns

5
string tail = test.Substring(test.LastIndexOf('-') + 1);

4
YourString.Substring(YourString.LastIndexOf("-"));

4
Wenn Sie am Ende "+ 1" ausschließen, enthält die Ausgabe zusammen mit der Zeichenfolge ein Sonderzeichen.
Meena

3

Ich kann sehen, dass dieser Beitrag über 46.000 Mal angesehen wurde. Ich würde wetten, dass viele der 46.000 Zuschauer diese Frage nur stellen, weil sie nur den Dateinamen wollen ... und diese Antworten können ein Kaninchenbau sein, wenn Sie Ihre Teilzeichenfolge nicht wörtlich mit dem at-Zeichen erstellen können.

Wenn Sie einfach den Dateinamen erhalten möchten, gibt es eine einfache Antwort, die hier erwähnt werden sollte. Auch wenn es nicht die genaue Antwort auf die Frage ist.

result = Path.GetFileName(fileName);

Siehe https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx




1
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");

if (indexOfHyphen >= 0)
{
    string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
    Console.WriteLine(contentAfterLastHyphen );
}

0

Ich habe eine String-Erweiterung dafür erstellt, hoffe es hilft.

public static string GetStringAfterChar(this string value, char substring)
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
            var index = value.LastIndexOf(substring);
            return index > 0 ? value.Substring(index + 1) : value;
        }

        return string.Empty;
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.