Как получить последнюю часть строки? - PullRequest
50 голосов
/ 02 августа 2010

Учитывая эту строку:

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

Я хочу получить последнюю часть: "BusinessRelationType"

Я думал о том, чтобы перевернуть всю строку, а затем искать первое «/», взять все слева от этого и повернуть вспять. Тем не менее, я надеюсь, что есть лучший / более краткий метод. Мысли

Спасибо, Пол

Ответы [ 11 ]

111 голосов
/ 02 августа 2010

однострочник с Linq:

string lastPart = text.Split('/').Last();
57 голосов
/ 02 августа 2010

Всякий раз, когда я нахожу, что пишу код, такой как LastIndexOf("/"), у меня возникает ощущение, что я, вероятно, делаю что-то небезопасное, и, вероятно, уже существует лучший метод.

Поскольку вы работаете с URI, я бы рекомендовал использовать класс System.Uri. Это обеспечивает вам проверку и безопасный, легкий доступ к любой части URI.

Uri uri = new Uri("http://s.opencalais.com/1/pred/BusinessRelationType");
string lastSegment = uri.Segments.Last();
38 голосов
/ 02 августа 2010

Вы можете использовать String.LastIndexOf.

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

Другой вариант - использовать Uri, если это то, что вам нужно.Преимущество этого состоит в том, что он анализирует другие части URI и хорошо обрабатывает строку запроса, например: BusinessRelationType?q=hello world

Uri uri = new Uri(s);
string leaf = uri.Segments.Last();
15 голосов
/ 02 августа 2010

Вы можете использовать string.LastIndexOf, чтобы найти последнее /, а затем Substring, чтобы получить все после него:

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

Обратите внимание, что LastIndexOf возвращает -1, если значение не найдено, эта вторая строка вернет всю строку, если в тексте нет /.

9 голосов
/ 02 августа 2010

Вот довольно краткий способ сделать это:

str.Substring(str.LastIndexOf("/")+1);
3 голосов
/ 02 августа 2010
if (!string.IsNullOrEmpty(url))
    return url.Substring(url.LastIndexOf('/') + 1);
return null;
2 голосов
/ 21 мая 2018

Принятый ответ может дать нежелательные результаты (пустая строка), если URL-адрес оканчивается на /

. Для предотвращения этого вы можете использовать:

string lastPart = text.TrimEnd('/').Split('/').Last();
2 голосов
/ 24 января 2013

Небольшой совет для любых глупых или ненаблюдающих людей (или тех, кто недавно бросил кофе и глуп, ненаблюдаем, ворчлив ... как я) - пути к файлам Windows используют '\' ... все примерыздесь, с другой стороны, используйте '/'.

Так что используйте '\\', чтобы получить конец пути к файлу Windows!:)

Решения здесь идеальны и полны, но, возможно, это может помешать другой бедной душе потратить час, как я только что это сделал!

1 голос
/ 08 июля 2016
Path.GetFileName

считает / и \ разделителями.

Path.GetFileName ("http://s.opencalais.com/1/pred/BusinessRelationType") =
"BusinessRelationType"
1 голос
/ 02 августа 2010

В качестве альтернативы вы можете использовать регулярное выражение /([^/]*?)$, чтобы найти совпадение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...