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


140

当这看起来很简单并且在字符串/字符/正则表达式上有很多问题时,我感到有些愚蠢,但是我找不到我真正需要的东西(除了另一种语言:在特定点之后删除所有文本)。

我有以下代码:

[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);
    }

我尝试了上述问题的解决方案(希望语法是一样的!),但是不行。我想先删除可以是任何可变长度的queryString,然后删除页面名称,也可以是任何长度。

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

Answers:


263

对于字符串操作,如果只想杀死?之后的所有内容,则可以执行此操作

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

编辑:如果最后一个斜杠之后的所有内容,请执行以下操作

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

或者,由于您使用的是URL,因此您可以像下面的代码一样对其进行处理

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

1
还是最后一个/
Charlie Salts 2010年

4
哦,是的,再读一遍。在这种情况下,他可以执行LastIndexOf(“ /”)。
安东尼·佩格拉姆

1
感谢x2提供了两种方法来执行此操作!
SventoryMang 2010年

1
@gsvirdi,在这种情况下,您可以将该URL加载到中Uri uri,然后访问uri.Segments。那将返回一个数组,而“ somepage.aspx”将是最后一项。
安东尼·佩格拉姆

1
我讨厌挑剔,但是索引> = 0不应吗?
珍妮·奥赖利2013年

103

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

input = input.Substring(input.IndexOf("/"));

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

input = input.Substring(0, input.IndexOf("/") + 1);

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

input = input.Substring(input.LastIndexOf("/"));

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

input = input.Substring(0, input.LastIndexOf("/") + 1);

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

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

input = input.Remove(input.IndexOf("/") + 1);

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

input = input.Remove(input.LastIndexOf("/") + 1);

7
请注意,如果字符串根本不包含“ /”,这些都将抛出一个示例。显然,如果您像原始问题中那样使用硬编码字符串,这将不是问题,但是在大多数情况下,您需要考虑这一点。
Elezar 2015年

7

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

if (path.Contains('|'))
   path = path.Split('|')[0];

实际上,您可以根据需要设置任意多个分隔符,但是假设您只有一个分隔符,这就是在“ |”之后获取所有内容的方法:

if (path.Contains('|'))
   path = path.Split('|')[1];

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



1

要删除特定字符之前的所有内容,请在下面使用。

string1 = string1.Substring(string1.IndexOf('$') + 1);

这是将$ char之前的所有内容删除。现在,如果要删除字符后的项目,只需将+1更改为-1,就可以设置了!

但是对于URL,我将使用内置的.NET类来实现。


1

Request.QueryString帮助您获取parameters和中包含的值URL

string http = "http://dave.com/customers.aspx?customername=dave"
string customername = Request.QueryString["customername"].ToString();

因此,customername变量应等于dave

问候


0

我第二个Hightechrider:已经为您构建了一个专门的Url类。

但是,我还必须指出,PHP的replaceAll使用正则表达式搜索模式,您也可以在.NET中进行操作-查看RegEx类。


0

您可以使用.NET的内置方法删除QueryString。即Request.QueryString.Remove["whatever"];

这里[]中的任何内容都是querystring您要删除的名称。

试试这个...我希望这会有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.