从字符串中删除最后一个正斜杠和尾随字符的简写方法

Cur*_*urt 16 c# string

如果我有以下字符串:

/ LOREM /存有/悲

我希望这成为:

/ LOREM /存有

删除最后一个正斜杠以及跟随它的所有字符的简便方法是什么?

我知道如何通过将字符串拆分为一个List<>并删除最后一个项目然后加入来完成此操作,但有没有更短的写入方式?

我的问题不是特定于URL.

new*_*rey 41

你可以使用Substring()LastIndexOf():

str = str.Substring(0, str.LastIndexOf('/'));
Run Code Online (Sandbox Code Playgroud)

编辑(建议的评论)
为了防止字符串可能不包含任何问题/,你可以使用类似的东西:

int lastSlash = str.LastIndexOf('/');
str = (lastSlash > -1) ? str.Substring(0, lastSlash) : str;
Run Code Online (Sandbox Code Playgroud)

将位置存储在临时变量中可以防止需要调用.LastIndexOf('/')两次,但可以将其删除,而不是使用单行解决方案.

  • 你想要在使用结果之前检查`LastIndexOf`没有返回-1,否则_BANG!_ (3认同)

Xin*_*Xin 11

如果网址末尾有"/",请将其删除.如果不; 只返回原来的.

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


Sjo*_*erd 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/
Run Code Online (Sandbox Code Playgroud)


Bug*_*der 6

一种简单的方法是

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

另一个也许

String s = "domain.com/lorem/ipsum/dolor";
s = s.TrimEnd('/');
Console.WriteLine(s);
Run Code Online (Sandbox Code Playgroud)