Hoe krijg ik het laatste deel van een string?

Gezien deze tekenreeks:

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

Ik wil het laatste deel ervan krijgen: “BusinessRelationType”

Ik heb erover nagedacht om de hele string om te draaien en dan op zoek te gaan naar de eerste “/”, neem alles links daarvan en draai dat om. Ik hoop echter dat er een betere/kortere methode is. Gedachten?

Bedankt, Paul


Antwoord 1, autoriteit 100%

oneliner met Linq:

var lastPart = text.Split('/').Last();

of als er lege strings in staan ​​(plus een null-optie):

var lastPart = text.Split('/').Where(x => !string.IsNullOrWhiteSpace(x)).LastOrDefault();

Antwoord 2, autoriteit 77%

Telkens wanneer ik merk dat ik code schrijf zoals LastIndexOf("/"), krijg ik het gevoel dat ik waarschijnlijk iets doe dat onveilig is, en er is waarschijnlijk al een betere methode beschikbaar.

p>

Omdat u met een URI werkt, raad ik u aan de klasse System.Urite gebruiken. Dit biedt u validatie en veilige, gemakkelijke toegang tot elk deel van de URI.

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

Antwoord 3, autoriteit 32%

U kunt string.LastIndexOf.

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

Een andere optie is om een ​​Urite gebruiken, als dat is wat je nodig hebt. Dit heeft als voordeel dat het andere delen van de uri kan ontleden en goed kan omgaan met de queryreeks, bijvoorbeeld: BusinessRelationType?q=hello world

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

Antwoord 4, autoriteit 13%

U kunt string.LastIndexOfom de laatste / te vinden en vervolgens Substringom alles erna te krijgen:

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

Merk op dat als LastIndexOf-1 retourneert als de waarde niet wordt gevonden, de tweede regel de hele tekenreeks retourneert als er geen / in de tekst staat.


Antwoord 5, autoriteit 7%

Hier is een vrij beknopte manier om dit te doen:

str.Substring(str.LastIndexOf("/")+1);

Antwoord 6, autoriteit 2%

if (!string.IsNullOrEmpty(url))
    return url.Substring(url.LastIndexOf('/') + 1);
return null;

Antwoord 7, autoriteit 2%

Een kleine tip voor dwaze of onoplettende mensen (of iedereen die onlangs de koffie heeft opgegeven en dwaas, onoplettend, humeurig is… zoals ikzelf) – Windows-bestandspaden gebruiken een '\'…alle voorbeelden hier gebruiken daarentegen een '/'.

Gebruik dus een '\\'om het einde van een Windows-bestandspad te krijgen! 🙂

De oplossingen hier zijn perfect en compleet, maar misschien kan dit voorkomen dat een andere arme ziel een uur verspilt zoals ik net deed!


Antwoord 8, autoriteit 2%

Het geaccepteerde antwoord kan ongewenste resultaten opleveren (lege tekenreeks) als de url eindigt op /

Om dit te voorkomen kunt u het volgende gebruiken:

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

Antwoord 9

U kunt ook de reguliere expressie /([^/]*?)$gebruiken om een ​​overeenkomst te vinden


Antwoord 10

Path.GetFileName

beschouwt / en \ als scheidingstekens.

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

Antwoord 11

Voor tekenreeks:

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

Als je string naar Uri converteert:// Hangt helemaal af van je behoefte.

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

Uitvoer:

BusinessRelationType

Other episodes