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

时间:2010-04-18 01:15:26

标签: c# .net string

当这看起来很简单并且关于字符串/字符/正则表达式有很多问题时,我觉得有点愚蠢,但我找不到我需要的东西(除了另一种语言:Remove All Text After Certain Point )。

我有以下代码:

[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中删除查询字符串,以便此测试通过?

8 个答案:

答案 0 :(得分:225)

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

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 :(得分:86)

删除第一个/

之前的所有内容
input = input.Substring(input.IndexOf("/"));

要删除第一个/

之后的所有内容
input = input.Substring(0, input.IndexOf("/") + 1);

删除上一个/

之前的所有内容
input = input.Substring(input.LastIndexOf("/"));

删除上一个/

之后的所有内容
input = input.Substring(0, input.LastIndexOf("/") + 1);

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

要删除第一个/

之后的所有内容
input = input.Remove(input.IndexOf("/") + 1);

删除上一个/

之后的所有内容
input = input.Remove(input.LastIndexOf("/") + 1);

答案 2 :(得分:6)

Uri课程通常是操纵Urls的最佳选择。

答案 3 :(得分:2)

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

@import "~bootstrap/scss/bootstrap-grid";

@include media-breakpoint-up(sm) {
    .some-class {
      display: block;
    }
}

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

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

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

答案 4 :(得分:1)

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

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

这样做,将$ char之前的所有内容移除并删除它。现在,如果你想删除一个字符后的项目,只需将+1更改为-1即可设置!

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

答案 5 :(得分:1)

Request.QueryString可帮助您获取parameters

中包含的URL和值

示例

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

所以customername变量应该等于dave

问候

答案 6 :(得分:0)

我是第二个Hightechrider:已经为你建立了一个专门的Url类。

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

答案 7 :(得分:0)

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

  

这里 []中的是你想要的querystring的名字   除去。

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