2012-10-17 45 views
9

如果我有以下字符串:速記的方法來從字符串中刪除最後一個斜槓和結尾字符

/LOREM /存有/悲

,我希望這成爲:

/LOREM /存有

什麼是短手は是否刪除最後一個正斜槓,以及後面的所有字符?

我知道如何通過將字符串拆分爲List<>並刪除最後一項然後加入,但是有沒有更簡單的方法來編寫它?

我的問題是不是 URL的具體。

+1

這將取決於你想如何處理像domain.com/或domain.com/lorem/ipsum/dolor/ – ZombieSheep

+2

什麼'domain.com/lorem/ipsum?路徑= /'網址嗎? – SLaks

+0

請忽略它的URL。 Theres其他邏輯適用於保護這 – Curt

回答

30

您可以使用Substring()LastIndexOf()

str = str.Substring(0, str.LastIndexOf('/')); 

編輯(建議評論)
爲了避免任何問題,當字符串可能不包含/,你可以使用類似:

int lastSlash = str.LastIndexOf('/'); 
str = (lastSlash > -1) ? str.Substring(0, lastSlash) : str; 

將位置存儲在臨時變量中可避免需要調用.LastIndexOf('/')兩次,但它可能會被拋棄,轉而採用單線解決方案。

+2

您需要檢查'LastIndexOf'在使用結果之前沒有返回-1,否則_BANG!_ –

+0

@GrantThomas感謝您的提示;我已在我的答案中添加了建議修改更新,以便爲此發佈通知。 – newfurniturey

+0

@newfurniturey謝謝!作品一種享受。所以,我可以把所有這一切都納入同一行(不需要我已經完成的'lastSlash'對象:'string.Contains(「/」)?[your logic]:null'。(我很高興如果沒有正斜槓,則返回null)。再次歡呼! – Curt

7

你可以做一些像str.Remove(str.LastIndexOf("/")),但沒有內置的方法來做你想做的。

編輯:您也可以使用URI對象來遍歷目錄,雖然它不給你想要什麼:

Uri baseUri = new Uri("http://domain.com/lorem/ipsum/dolor"); 
Uri myUri = new Uri(baseUri, "."); 
// myUri now contains http://domain.com/lorem/ipsum/ 
2

您可以使用正則表達式/[^/]*$並用空字符串替換:

var fixed = new Regex("/[^/]*$").Replace("domain.com/lorem/ipsum/dolor", "") 

但這可能是過度殺傷。 @ newfurniturey的SubstringLastIndexOf的答案可能是最好的。

3

一個簡單的辦法是

String s = "domain.com/lorem/ipsum/dolor"; 
    s = s.Substring(0, s.LastIndexOf('/')); 
    Console.WriteLine(s); 

另一個也許

String s = "domain.com/lorem/ipsum/dolor"; 
s = s.TrimEnd('/'); 
Console.WriteLine(s); 
+0

TrimEnd不起作用。它將在最後刪除「/」,但它不會在最後一次出現後刪除文本 – Chris

0
 while (input.Last() == '/' || input.Last() == '\\') 
     { 
      input = input.Substring(0, input.Length - 1); 
     } 
+0

儘管此代碼可能會回答問題,最好包括一些背景,解釋它是如何工作的,並說明何時使用它。從長遠來看,僅有代碼的答案是沒有用的。 – ryanyuyu

2

我喜歡創造像這樣的東西的String擴展:

/// <summary> 
/// Returns with suffix removed, if present 
/// </summary> 
public static string TrimIfEndsWith(
    this string value, 
    string suffix) 
{ 
    return 
     value.EndsWith(suffix) ? 
      value.Substring(0, value.Length - suffix.Length) : 
      value; 
} 

然後,您可以像這樣使用:

var myString = "/lorem/ipsum/dolor"; 
myStringClean = myString.TrimIfEndsWith("/dolor"); 

你現在有在您的所有項目,可以用來去除一個尾隨字符或多個的可重複使用的擴展。

4

如果網址末尾有'/',請將其刪除。 如果不是;只是返回原來的一個。

var url = this.Request.RequestUri.ToString(); 
url = url.EndsWith("/") ? url.Substring(0, url.Length - 1) : url; 
url += @"/mycontroller"; 
0

謝謝@Curt你的問題。 我稍微改進@ newfurniturey的代碼,這裏是我的版本。

if(str.Contains('/')){ 
     str = str.Substring(0, str.LastIndexOf('/')); 
} 
相關問題