2010-08-02 89 views
43

鑑於此字符串:如何獲取字符串的最後部分?

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

我想它的最後一部分:「BusinessRelationType」

我一直在想扭轉了整個字符串,然後找第一個「/」,採取一切在那的左邊,並且相反。但是,我希望有一個更好/更簡潔的方法。思考?

謝謝,保羅

回答

98

一行代碼使用LINQ:

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

您可以使用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(); 
14

您可以使用string.LastIndexOf找到最後/然後Substring後得到的一切:

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

請注意,如LastIndexOf返回-1,如果沒有找到該值,則第二行將返回整個字符串(如果文本中沒有/)。

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

這裏是做這一個相當簡潔的方式:

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

或者您可以使用正則表達式/([^/]*?)$找到匹配

+0

懶惰不起作用吧,不過你在這裏不需要它。 '[^ /] * $'會做。 – Kobi 2010-08-02 11:33:47

33

每當我發現自己寫代碼如LastIndexOf("/"),我感覺t我可能正在做一些不安全的事情,並且可能有更好的方法可用。

當您使用URI時,我會推薦使用System.Uri類。這爲您提供驗證和安全,方便地訪問URI的任何部分。

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

小提示任何愚蠢或眛的人(或任何人誰​​最近放棄咖啡,是愚蠢的,眛,不高興......像我自己) - Windows的文件路徑使用'\' ...所有的這裏的例子另一方面使用'/'

因此,使用'\\'來獲得Windows文件路徑的結尾! :)

這裏的解決方案是完美的和完整的,但也許這可能會阻止一些其他可憐的靈魂浪費我一小時的時間!

+2

在我看來,使用@「\ path \ to \ something」是一種更清潔的方式:) – AntoineLev 2015-01-30 15:17:33

0
Path.GetFileName 

認爲/和\爲分隔符。

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