it-swarm.com.de

Wie bekomme ich den letzten Teil einer Zeichenfolge?

Gegeben diese Zeichenfolge:

http://s.opencalais.com/1/pred/BusinessRelationType

Ich möchte den letzten Teil davon erhalten: "BusinessRelationType"

Ich habe darüber nachgedacht, die gesamte Zeichenfolge umzukehren, dann nach dem ersten "/" zu suchen, alles auf die linke Seite zu nehmen und das umzukehren. Ich hoffe jedoch, dass es eine bessere/prägnantere Methode gibt. Gedanken?

Danke, Paul

48
Paul Fryer

einliner mit Linq:

string lastPart = text.Split('/').Last();
110
naspinski

Immer wenn ich Code wie LastIndexOf("/") schreibe, habe ich das Gefühl, dass ich wahrscheinlich etwas mache, das unsicher ist, und es gibt wahrscheinlich bereits eine bessere Methode.

Da Sie mit einem URI arbeiten, würde ich empfehlen, die Klasse System.Uri zu verwenden. Dadurch erhalten Sie eine Validierung und einen sicheren, einfachen Zugriff auf alle Teile des URI.

Uri uri = new Uri("http://s.opencalais.com/1/pred/BusinessRelationType");
string lastSegment = uri.Segments.Last();
51
Benp44

Sie können String.LastIndexOf verwenden.

int position = s.LastIndexOf('/');
if (position > -1)
    s = s.Substring(position + 1);

Eine andere Option ist die Verwendung einer Uri, falls dies erforderlich ist. Dies hat den Vorteil, dass andere Teile des URI analysiert werden und die Abfragezeichenfolge gut verarbeitet wird, z. B .: BusinessRelationType?q=hello world

Uri uri = new Uri(s);
string leaf = uri.Segments.Last();
38
Kobi

Sie können string.LastIndexOf verwenden, um das letzte/zu finden und dann Substring , um alles danach zu erhalten:

int index = text.LastIndexOf('/');
string rhs = text.Substring(index + 1);

Wenn LastIndexOf -1 zurückgibt, wenn der Wert nicht gefunden wird, wird in der zweiten Zeile die gesamte Zeichenfolge zurückgegeben, wenn im Text kein/steht.

15
Jon Skeet

Hier ist ein ziemlich kurzer Weg, dies zu tun:

str.Substring(str.LastIndexOf("/")+1);
9
Igor Zevaka
if (!string.IsNullOrEmpty(url))
    return url.Substring(url.LastIndexOf('/') + 1);
return null;
3
Matthew Abbott

Ein kleiner Tipp für alle dummen oder unbeobachteten Menschen (oder alle, die vor kurzem Kaffee aufgegeben haben und dumm, unbeobachtet, mürrisch ... wie ich sind) - Windows-Dateipfade verwenden einen '\'... alle Beispiele hier Verwenden Sie einen '/'.

Verwenden Sie also einen '\\', um das Ende eines Windows-Dateipfads abzurufen! :)

Die Lösungen hier sind perfekt und vollständig, aber vielleicht verhindert dies, dass eine andere arme Seele eine Stunde so verschwendet, wie ich es gerade getan habe!

2
Simon Kiely
Path.GetFileName

betrachtet/und\als Trennzeichen.

Path.GetFileName ("http://s.opencalais.com/1/pred/BusinessRelationType") =
"BusinessRelationType"
1
citykid

Die akzeptierte Antwort kann zu unerwünschten Ergebnissen führen (leere Zeichenfolge), wenn die URL mit/endet.

Um dies zu verhindern, können Sie Folgendes verwenden:

string lastPart = text.TrimEnd('/').Split('/').Last();
1
GiampaoloGabba

Alternativ können Sie den regulären Ausdruck /([^/]*?)$ verwenden, um Übereinstimmung zu finden

1
DixonD

Für String:

var stringUrl = "http://s.opencalais.com/1/pred/BusinessRelationType";
var lastPartOfUrl = stringUrl.Substring(stringUrl.LastIndexOf("/") + 1);

Wenn Sie einen String in Uri konvertieren: // Totally hängt von Ihrer Anforderung ab.

var stringUrl = "http://s.opencalais.com/1/pred/BusinessRelationType";
var convertStringToUri = new Uri(stringUrl);
var lastPartOfUrl = convertStringToUri.PathAndQuery.Substring(convertStringToUri.AbsolutePath.LastIndexOf("/") + 1);

Ausgabe:

BusinessRelationType
0
CSharper