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

C# 删除字符串中特定字符后的字符,然后删除子字符串?,c#,.net,string,C#,.net,String,当这看起来很简单,而且有很多关于字符串/字符/正则表达式的问题,但我找不到我所需要的东西时,我觉得发这篇文章有点傻(除了用另一种语言:) 我有以下代码: [Test] public void stringManipulation() { String filename = "testpage.aspx"; String currentFullUrl = "http://localhost:2000/somefolder/myrep/test.asp

当这看起来很简单,而且有很多关于字符串/字符/正则表达式的问题,但我找不到我所需要的东西时,我觉得发这篇文章有点傻(除了用另一种语言:)

我有以下代码:

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

对于字符串操作,如果您只想在?之后删除所有内容,可以这样做

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

通常情况下,操作Url的最佳选择是。第二个Hightechrider:已经为您构建了一个专门的Url类


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

您可以使用.NET的内置方法删除
查询字符串。
i、 例如,
Request.QueryString.Remove[“whatever”]

在这里,[]中的任何内容都是您想要查询的
查询字符串的名称
移除

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

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

string1 = string1.Substring(string1.IndexOf('$') + 1);
这样做的目的是,获取$char之前的所有内容并将其删除。现在,如果您想删除字符后面的项目,只需将+1更改为-1即可


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

删除第一个
/

input = input.Substring(input.IndexOf("/"));
input = input.Substring(0, input.IndexOf("/") + 1);
input = input.Substring(input.LastIndexOf("/"));
input = input.Substring(0, input.LastIndexOf("/") + 1);
input = input.Remove(input.IndexOf("/") + 1);
input = input.Remove(input.LastIndexOf("/") + 1);
删除第一个
/

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

要删除最后一个
/

input = input.Substring(input.IndexOf("/"));
input = input.Substring(0, input.IndexOf("/") + 1);
input = input.Substring(input.LastIndexOf("/"));
input = input.Substring(0, input.LastIndexOf("/") + 1);
input = input.Remove(input.IndexOf("/") + 1);
input = input.Remove(input.LastIndexOf("/") + 1);
删除最后一个
/

input = input.Substring(input.IndexOf("/"));
input = input.Substring(0, input.IndexOf("/") + 1);
input = input.Substring(input.LastIndexOf("/"));
input = input.Substring(0, input.LastIndexOf("/") + 1);
input = input.Remove(input.IndexOf("/") + 1);
input = input.Remove(input.LastIndexOf("/") + 1);
删除指定字符后的字符的更简单解决方案是使用以下方法:

删除第一个
/

input = input.Substring(input.IndexOf("/"));
input = input.Substring(0, input.IndexOf("/") + 1);
input = input.Substring(input.LastIndexOf("/"));
input = input.Substring(0, input.LastIndexOf("/") + 1);
input = input.Remove(input.IndexOf("/") + 1);
input = input.Remove(input.LastIndexOf("/") + 1);
删除最后一个
/

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

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

范例

string http = "http://dave.com/customers.aspx?customername=dave"
string customername = Request.QueryString["customername"].ToString();
因此customername变量应该等于dave


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

if (path.Contains('|'))
   path = path.Split('|')[0];
事实上,您可以有任意多个分隔符,但假设您只有一个分隔符,下面是如何获得“|”之后的所有内容:

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

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

还是最后一段代码?
。在这种情况下,他可以使用LastIndexOf(“/”),谢谢x2提供了两种方法@在这种情况下,您可以将该URL加载到
Uri
,然后访问
Uri.Segments
。这将返回一个数组,“somepage.aspx”将是最后一项。我不喜欢挑剔,但它不应该是index>=0吗?一个链接示例会很好。请注意,如果字符串根本不包含“/”的话,这些都将抛出一个示例。显然,如果你像原来的问题那样使用硬编码字符串,这不会成为问题,但在大多数情况下,你会考虑到这一点。@Elezar我想你的意思是“将抛出异常”而不是“示例”,但你的观点是很好的。哈,这已经有5年半了,以前没有人提到过。是的,你完全正确,我的意思是“例外”