【问题标题】:Remove characters after specific character in string, then remove substring?删除字符串中特定字符之后的字符,然后删除子字符串?
【发布时间】:2010-04-18 01:15:26
【问题描述】:

当这看起来很简单并且有大量关于字符串/字符/正则表达式的问题时,我感觉有点愚蠢,但我找不到我需要的东西(除了另一种语言: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 中删除查询字符串以使该测试通过?

【问题讨论】:

    标签: c# .net string


    【解决方案1】:

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

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

    【讨论】:

    • 还是最后一个/
    • 哦,是的,再读一遍。在这种情况下,他可以做 LastIndexOf("/")。
    • 感谢 x2 提供两种方法!
    • @gsvirdi,在这种情况下,您可以将该 URL 加载到Uri uri,然后访问uri.Segments。这将返回一个数组,“somepage.aspx”将是最后一项。
    • 我讨厌挑剔,但不应该是 index >= 0 吗?
    【解决方案2】:

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

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

    【讨论】:

    • 请注意,如果字符串根本不包含“/”,这些都会抛出一个示例。显然,如果您像原始问题一样使用硬编码字符串,这将不是问题,但在大多数情况下,您需要考虑到这一点。
    • @Elezar 我认为您的意思是“将引发异常”而不是“示例”,但您的观点是有道理的。
    • 哈,已经有5年半了,之前没人提过。是的,我说的“例外”是绝对正确的。
    【解决方案3】:

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

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

    事实上,您可以使用任意数量的分隔符,但假设您只有一个分隔符,那么您将如何获得“|”之后的所有内容:

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

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

    【讨论】:

      【解决方案4】:

      Uri class 通常是您处理 URL 的最佳选择。

      【讨论】:

      • 一个链接的例子会很好。
      【解决方案5】:

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

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

      这样做的目的是获取 $ 字符之前的所有内容并将其删除。现在,如果您想删除字符后的项目,只需将 +1 更改为 -1 即可!

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

      【讨论】:

        【解决方案6】:

        Request.QueryString 帮助您获取parametersURL 中包含的值

        例子

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

        所以 customername 变量应该等于 dave

        问候

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

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

            这里 whatever 中的 [ ] 是您想要的 querystring 的名称 删除。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2022-10-12
              • 1970-01-01
              • 2011-04-28
              • 1970-01-01
              • 1970-01-01
              • 2015-10-02
              相关资源
              最近更新 更多