从字符串中删除文本,直到达到某个字符

我正试图找出这个问题。 我需要“修复”一些链接,这是一个例子:

  1. www.site.com/link/index.php?REMOVETHISHERE
  2. www.site.com/index.php?REMOVETHISHERE

所以基本上我想删除所有东西,直到它到达? 字符。 谢谢你的帮助。

  string s = @"www.site.com/link/index.php?REMOVETHISHERE"; s = s.Remove( s.LastIndexOf('?') ); //Now s will be simply "www.site.com/link/index.php" 

应该这样做

尽管正确制作的字符串操作可行,但提取部分URI信息的更一般方法是使用System.Uri类型,该类型具有封装这些操作的方法,例如

 var uri = new Uri("http://www.site.com/link/index.php?REMOVETHISHERE"); var part = uri.GetLeftPart(UriPartial.Path); 

这将更清楚地传达您的代码的意图,并且您将重新使用已知可用的当前实现。

如果字符串不表示有效的URI, System.Uri构造函数将抛出exception,但无论如何,如果遇到无效的URI,您可能希望在程序中调用其他一些行为。 要检测无效的URI,您可以捕获exception或使用其中一个TryCreate()重载。

使用string.split

 string URL = "www.site.com/link/index.php?REMOVETHISHERE" var parts = URL.Split('?'); 

然后, parts[0]将包含“www.site.com/link/index.php”, parts[1]将包含“REMOVETHISHERE”。 然后,您可以使用您想要的任何部分。

在尝试访问数组的第二个元素之前,您应该添加检查以确保有两个部分。 你可以(例如)检查字符串是否包含“?” 在尝试调用Split之前。

删除最后一个“?” 以及之后的一切:

  string input = @"www.site.com/link/index.php?REMOVETHISHERE"; input = input.Remove(input.LastIndexOf('?')); OR string input = @"www.site.com/link/index.php?REMOVETHISHERE"; input = input.Substring(0, input.LastIndexOf('?')); 

现在输出将是:

 www.site.com/link/index.php