删除字符串中特定字符后的字符,然后删除子字符串?

Sve*_*ang 129 .net c# string

当这看起来很简单并且有很多关于字符串/字符/正则表达式的问题时,我觉得有点愚蠢的发帖,但我找不到我需要的东西(除了另一种语言:删除所有文本后某些点).

我有以下代码:

[Test]
    public void stringManipulation()
    {
        String filename = "testpage.aspx";
        String currentFullUrl = "http://localhost:2000/somefolder/myrep/test.aspx?q=qvalue";
        String fullUrlWithoutQueryString = currentFullUrl.Replace("?.*", "");
        String urlWithoutPageName = fullUrlWithoutQueryString.Remove(fullUrlWithoutQueryString.Length - filename.Length);

        String expected = "http://localhost:2000/somefolder/myrep/";
        String actual = urlWithoutPageName;
        Assert.AreEqual(expected, actual);
    }
Run Code Online (Sandbox Code Playgroud)

我在上面的问题中尝试了解决方案(希望语法是相同的!)但不是.我想首先删除queryString,它可以是任何可变长度,然后删除页面名称,也可以是任何长度.

如何从完整的URL中删除查询字符串,以便此测试通过?

Ant*_*ram 245

对于字符串操作,如果你只想杀死?之后的所有东西,你可以这样做

string input = "http://www.somesite.com/somepage.aspx?whatever";
int index = input.IndexOf("?");
if (index > 0)
   input = input.Substring(0, index);
Run Code Online (Sandbox Code Playgroud)

编辑:如果在最后一个斜线之后的所有内容,请执行类似的操作

string input = "http://www.somesite.com/somepage.aspx?whatever";
int index = input.LastIndexOf("/");
if (index > 0)
    input = input.Substring(0, index); // or index + 1 to keep slash
Run Code Online (Sandbox Code Playgroud)

或者,由于您正在使用URL,因此您可以像使用此代码一样使用它

System.Uri uri = new Uri("http://www.somesite.com/what/test.aspx?hello=1");
string fixedUri = uri.AbsoluteUri.Replace(uri.Query, string.Empty);
Run Code Online (Sandbox Code Playgroud)

  • 哦,是的,重新阅读.在这种情况下,他可以做LastIndexOf("/"). (3认同)
  • 我讨厌挑剔,但它不应该是 index >= 0 吗? (2认同)

ePa*_*dit 97

在第一个之前删除所有内容 /

input = input.Substring(input.IndexOf("/"));
Run Code Online (Sandbox Code Playgroud)

在第一个之后删除所有内容 /

input = input.Substring(0, input.IndexOf("/") + 1);
Run Code Online (Sandbox Code Playgroud)

在最后一个之前删除所有内容 /

input = input.Substring(input.LastIndexOf("/"));
Run Code Online (Sandbox Code Playgroud)

删除最后一个后的所有内容 /

input = input.Substring(0, input.LastIndexOf("/") + 1);
Run Code Online (Sandbox Code Playgroud)

在指定的char之后删除字符的更简单的解决方案是使用String.Remove()方法,如下所示:

在第一个之后删除所有内容 /

input = input.Remove(input.IndexOf("/") + 1);
Run Code Online (Sandbox Code Playgroud)

删除最后一个后的所有内容 /

input = input.Remove(input.LastIndexOf("/") + 1);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果字符串根本不包含"/",这些都会抛出一个示例.显然,如果您使用原始问题中的硬编码字符串,这不会成为问题,但在大多数情况下,您需要考虑这一点. (6认同)
  • 很好的例子,特别是显示所有4个案例. (3认同)

Ian*_*cer 6

Uri类通常是操纵Urls的最佳选择.

  • 链接的一个例子很好. (6认同)

小智 5

这是另一个简单的解决方案。以下代码将返回“ |”之前的所有内容 字符:

if (path.Contains('|'))
   path = path.Split('|')[0];
Run Code Online (Sandbox Code Playgroud)

实际上,您可以根据需要设置任意数量的分隔符,但是假设您只有一个分隔符,则可以用以下方法在'|'之后得到所有内容:

if (path.Contains('|'))
   path = path.Split('|')[1];
Run Code Online (Sandbox Code Playgroud)

(我在第二段代码中所做的更改只是数组的索引。)