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

t9eec4r0  于 2022-12-30  发布在  .NET
关注(0)|答案(9)|浏览(373)

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

ufj5ltwl

ufj5ltwl1#

对于字符串操作,如果只想删除?之后的所有内容,可以执行以下操作

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

fcg9iug32#

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

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

zyfwsgd63#

下面是另一个简单的解决方案。下面的代码将返回"| '字符:

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

实际上,您可以使用任意多个分隔符,但假设您只有一个分隔符,下面是如何获取'| ':

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

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

zed5wv10

zed5wv104#

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

luaexgnf

luaexgnf5#

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

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

这个函数所做的就是,把$ char之前的所有元素都去掉。现在如果你想去掉一个字符之后的元素,只需要把+1改成-1,你就可以设置了!
但是对于URL,我会使用内置的.NET类来处理它。

pengsaosao

pengsaosao6#

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

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

因此customername变量应等于dave
问候

6za6bjd0

6za6bjd07#

我附议高科技骑士:已经为您构建了一个专门的URL类。
不过,我还必须指出,PHP的replaceAll使用正则表达式作为搜索模式,这在.NET中也可以做到--看看RegEx类。

vfhzx4xs

vfhzx4xs8#

你可以使用.NET的内置方法来删除QueryString .例如,Request.QueryString.Remove["whatever"];
此处,[ ]中的 whatever 是要删除的querystring的名称。
试试这个...我希望这个会有帮助。

nwlls2ji

nwlls2ji9#

可以使用此扩展方法移除字符串中的查询参数(?之后的所有内容

public static string RemoveQueryParameters(this string str)
    {
        int index = str.IndexOf("?");
        return index >= 0 ? str.Substring(0, index) : str;
    }

相关问题