如果我有以下字符串:速記的方法來從字符串中刪除最後一個斜槓和結尾字符
/LOREM /存有/悲
,我希望這成爲:
/LOREM /存有
什麼是短手は是否刪除最後一個正斜槓,以及後面的所有字符?
我知道如何通過將字符串拆分爲List<>
並刪除最後一項然後加入,但是有沒有更簡單的方法來編寫它?
我的問題是不是 URL的具體。
如果我有以下字符串:速記的方法來從字符串中刪除最後一個斜槓和結尾字符
/LOREM /存有/悲
,我希望這成爲:
/LOREM /存有
什麼是短手は是否刪除最後一個正斜槓,以及後面的所有字符?
我知道如何通過將字符串拆分爲List<>
並刪除最後一項然後加入,但是有沒有更簡單的方法來編寫它?
我的問題是不是 URL的具體。
您可以使用Substring()
和LastIndexOf()
:
str = str.Substring(0, str.LastIndexOf('/'));
編輯(建議評論)
爲了避免任何問題,當字符串可能不包含/
,你可以使用類似:
int lastSlash = str.LastIndexOf('/');
str = (lastSlash > -1) ? str.Substring(0, lastSlash) : str;
將位置存儲在臨時變量中可避免需要調用.LastIndexOf('/')
兩次,但它可能會被拋棄,轉而採用單線解決方案。
您需要檢查'LastIndexOf'在使用結果之前沒有返回-1,否則_BANG!_ –
@GrantThomas感謝您的提示;我已在我的答案中添加了建議修改更新,以便爲此發佈通知。 – newfurniturey
@newfurniturey謝謝!作品一種享受。所以,我可以把所有這一切都納入同一行(不需要我已經完成的'lastSlash'對象:'string.Contains(「/」)?[your logic]:null'。(我很高興如果沒有正斜槓,則返回null)。再次歡呼! – Curt
你可以做一些像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/
您可以使用正則表達式/[^/]*$
並用空字符串替換:
var fixed = new Regex("/[^/]*$").Replace("domain.com/lorem/ipsum/dolor", "")
但這可能是過度殺傷。 @ newfurniturey的Substring
與LastIndexOf
的答案可能是最好的。
一個簡單的辦法是
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);
TrimEnd不起作用。它將在最後刪除「/」,但它不會在最後一次出現後刪除文本 – Chris
while (input.Last() == '/' || input.Last() == '\\')
{
input = input.Substring(0, input.Length - 1);
}
儘管此代碼可能會回答問題,最好包括一些背景,解釋它是如何工作的,並說明何時使用它。從長遠來看,僅有代碼的答案是沒有用的。 – ryanyuyu
我喜歡創造像這樣的東西的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");
你現在有在您的所有項目,可以用來去除一個尾隨字符或多個的可重複使用的擴展。
如果網址末尾有'/',請將其刪除。 如果不是;只是返回原來的一個。
var url = this.Request.RequestUri.ToString();
url = url.EndsWith("/") ? url.Substring(0, url.Length - 1) : url;
url += @"/mycontroller";
謝謝@Curt你的問題。 我稍微改進@ newfurniturey的代碼,這裏是我的版本。
if(str.Contains('/')){
str = str.Substring(0, str.LastIndexOf('/'));
}
這將取決於你想如何處理像domain.com/或domain.com/lorem/ipsum/dolor/ – ZombieSheep
什麼'domain.com/lorem/ipsum?路徑= /'網址嗎? – SLaks
請忽略它的URL。 Theres其他邏輯適用於保護這 – Curt