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

本文关键字:字符 字符串 删除 文本 | 更新日期: 2023-09-27 18:16:30

我有一个问题,试图找出这个。我需要"修复"一些链接,下面是一个例子:

  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构造函数将抛出异常,但是如果遇到无效的URI,您可能希望在程序中调用一些其他行为。要检测无效的URI,您可以捕获异常或使用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