当这看起来很简单并且有大量关于字符串/字符/正则表达式的问题时,我感觉有点愚蠢,但我找不到我需要的东西。
我有以下代码:
[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); }
我尝试了上述问题中的解决方案(希望语法相同!)但没有。我想首先删除可能是任何可变长度的查询字符串,然后删除页面名称,它又可以是任何长度。
如何从完整 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);