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

时间:2011-12-03 23:35:54

标签: c# string split

我有一个问题试图弄清楚这一点。我需要"修复"一些链接,这是一个例子:

  1. www.site.com/link/index.php?REMOVETHISHERE
  2. www.site.com/index.php?REMOVETHISHERE
  3. 所以基本上我想删除所有东西,直到它到达?字符。谢谢你的帮助。

4 个答案:

答案 0 :(得分:18)

 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"

应该这样做

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:2)

使用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之前。

答案 3 :(得分:0)

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

    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