Ответ 1
один вкладыш с Linq:
var lastPart = text.Split('/').Last();
или если у вас там есть пустые строки (плюс нулевая опция):
var lastPart = text.Split('/').Where(x => !string.IsNullOrWhiteSpace(x)).LastOrDefault();
С учетом этой строки:
http://s.opencalais.com/1/pred/BusinessRelationType
Я хочу получить последнюю его часть: "BusinessRelationType"
Я думал об обращении всей строки, ища первую "/", берем все слева и наоборот. Тем не менее, я надеюсь, что есть лучший/более сжатый метод. Мысли?
Спасибо, Пол
один вкладыш с Linq:
var lastPart = text.Split('/').Last();
или если у вас там есть пустые строки (плюс нулевая опция):
var lastPart = text.Split('/').Where(x => !string.IsNullOrWhiteSpace(x)).LastOrDefault();
Всякий раз, когда я нахожу, что пишу код, например LastIndexOf("/")
, у меня возникает ощущение, что я, вероятно, делаю что-то небезопасное, и, вероятно, есть лучший метод, который уже доступен.
Когда вы работаете с URI, я бы рекомендовал использовать класс System.Uri
. Это обеспечивает проверку и безопасный доступ к любой части URI.
Uri uri = new Uri("http://s.opencalais.com/1/pred/BusinessRelationType");
string lastSegment = uri.Segments.Last();
Вы можете использовать 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();
Вы можете использовать string.LastIndexOf
, чтобы найти последние /, а затем Substring
, чтобы получить все после него:
int index = text.LastIndexOf('/');
string rhs = text.Substring(index + 1);
Обратите внимание, что поскольку LastIndexOf
возвращает -1, если значение не найдено, вторая строка возвращает всю строку, если в тексте нет/.
Вот довольно краткий способ сделать это:
str.Substring(str.LastIndexOf("/")+1);
if (!string.IsNullOrEmpty(url))
return url.Substring(url.LastIndexOf('/') + 1);
return null;
Небольшой совет для любых глупых или ненаблюдаемых людей (или тех, кто недавно отказался от кофе и глупый, ненаблюдательный, грубый... как и я). Пути файлов Windows используют '\'
... все примеры здесь, с другой стороны, используйте '/'
.
Поэтому используйте '\\'
, чтобы получить конец пути к файлу Windows!:)
Решения здесь идеальны и полны, но, возможно, это может помешать какой-либо другой бедной душе тратить час, как я только что сделал!
Принятый ответ может дать непредвиденные результаты (пустая строка), если URL-адрес оканчивается на /
Чтобы предотвратить это, вы можете использовать:
string lastPart = text.TrimEnd('/').Split('/').Last();
В качестве альтернативы вы можете использовать регулярное выражение /([^/]*?)$
для поиска соответствия
Path.GetFileName
рассматривает/и\как разделители.
Path.GetFileName ("http://s.opencalais.com/1/pred/BusinessRelationType") =
"BusinessRelationType"
Для строки:
var stringUrl = "http://s.opencalais.com/1/pred/BusinessRelationType";
var lastPartOfUrl = stringUrl.Substring(stringUrl.LastIndexOf("/") + 1);
Если вы преобразуете строку в Uri://Полностью зависит от ваших требований.
var stringUrl = "http://s.opencalais.com/1/pred/BusinessRelationType";
var convertStringToUri = new Uri(stringUrl);
var lastPartOfUrl = convertStringToUri.PathAndQuery.Substring(convertStringToUri.AbsolutePath.LastIndexOf("/") + 1);
Выход:
BusinessRelationType