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