删除在列表中找到的字符串部分

本文关键字:字符串部 列表 删除 | 更新日期: 2023-09-27 18:18:25

我试图找到一种优雅的方式来从单个字符串中删除列表中包含的数据。下面是一个简单完整的例子,不能工作:

private string removeWebSuffixes()
{ 
    string siteName="someSite.com";
    List<string> siteNames=new List<string>{siteName};
    List<string> domainSuffixes=new List<string>{".net",".com",".gov"};
    domainSuffixes.ForEach(x=>siteName.Replace(x,""));
    return siteName;//actually, should return result of siteName.replace statement
}

我认为这个例子不能工作,因为替换语句没有返回值到任何东西,但我已经包括它,因为我认为它清楚地传达了我想要完成的。

我打赌有一个很容易做到这一点(我不是指foreach循环),但我没有看到它。然而。

删除在列表中找到的字符串部分

Replace()实际上并不改变字符串。如果您希望保留更改,则需要将返回值写回原始字符串:

domainSuffixes.ForEach(x => siteName = siteName.Replace(x, ""));

在看到Justin的回复之前,我是这么想的:

private string removeDomainSuffix(string siteName)
{ 
    List<string> siteNames=new List<string>(){siteName};
    List<string> domainNames=General.GetWebDomains();
    var truncated= 
    (
      from sites in siteNames
      from suffixes in domainNames
      select new { results=(sites.Replace(suffixes,"")) }
      ).OrderBy(x=>x.results.Length).Take(1); 
    foreach(var v in truncated)
      return (string.Format("{0}",v.results));
    return siteName;
}

它可以工作,但不如他的好,我不知道如何从var中获得单个字符串而不诉诸循环。

希望我不会因为在这里发布这个解决方案而遇到麻烦。我将把Justin的作为答案