20

如果我有以下字符串:

/lorem/ipsum/dolor

我希望它变成:

/lorem/ipsum

删除最后一个正斜杠及其后面的所有字符的简写方法是什么?

我知道如何通过将字符串拆分为 aList<>并删除最后一项,然后加入来做到这一点,但是有没有更短的方法来写这个?

我的问题不是特定于 URL 的。

4

9 回答 9

47

您可以使用Substring()LastIndexOf()

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

编辑(建议评论)
为了防止字符串可能不包含 a 时出现任何问题/,您可以使用类似:

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

将位置存储在临时变量中可以避免调用.LastIndexOf('/')两次,但可以放弃它以支持单行解决方案。

于 2012-10-17T14:41:37.013 回答
17

如果网址末尾有“/”,请将其删除。如果不; 只需退回原件。

var url = this.Request.RequestUri.ToString();
url = url.EndsWith("/") ? url.Substring(0, url.Length - 1) : url;
url += @"/mycontroller";
于 2016-02-11T22:22:09.750 回答
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/
于 2012-10-17T14:40:07.127 回答
7

一种简单的方法是

    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);
于 2012-10-17T14:46:21.490 回答
3

您可以使用正则表达式/[^/]*$并替换为空字符串:

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

但这里可能有点矫枉过正。@newfurniturey 对 with 的回答Substring可能LastIndexOf是最好的。

于 2012-10-17T14:40:33.393 回答
3

我喜欢为这样的东西创建一个字符串扩展:

/// <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");

您现在在所有项目中都有一个可重复使用的扩展,可用于删除一个或多个尾随字符。

于 2015-09-16T19:05:29.057 回答
1
using System.IO;

mystring.TrimEnd(Path.AltDirectorySeparatorChar); // To remove "/"
mystring.TrimEnd(Path.DirectorySeparatorChar); // To remove "\"
于 2021-10-13T01:43:26.163 回答
0

谢谢@Curt 的提问。我稍微改进了@newfurniturey 的代码,这是我的版本。

 if(str.Contains('/')){
      str = str.Substring(0, str.LastIndexOf('/'));
 }
于 2017-06-07T22:41:33.240 回答
0
        while (input.Last() == '/' || input.Last() == '\\')
        {
            input = input.Substring(0, input.Length - 1);
        }
于 2015-08-18T17:01:09.387 回答