2

我试图找到一种优雅的方法来从单个字符串中删除列表中包含的数据。下面显示了一个简单的完整示例,但它不起作用

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 循环),但我没有看到。然而。

4

2 回答 2

3

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

domainSuffixes.ForEach(x => siteName = siteName.Replace(x, ""));
于 2013-06-14T02:23:12.187 回答
0

这是我在看到贾斯汀的回应之前想出的:

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 中取出单个字符串。

希望我也不会因为在此处发布此解决方案而遇到麻烦。我会将贾斯汀的答案标记为答案。

于 2013-06-14T03:08:49.737 回答