【问题标题】:Remove specific char in all strings in a list in c#删除C#列表中所有字符串中的特定字符
【发布时间】:2014-09-14 23:50:34
【问题描述】:

我的列表中有一些字符串

KHIJEFGACDB
KHIJEFGBACD
KHIJEFGBCDA
KHIJEFGCDAB
KHIJEFGCDBA
KHIJGABCDEF
KHIJGABEFCD
KHIJGACDBEF
KHIJGACDEFB
KHIJGAEFBCD
KHIJGAEFCDB
KHIJGBACDEF
KHIJGBAEFCD

我需要删除列表中所有字符串中可用的HIJ

我做了一个像下面这样的 C# 程序

foreach (string item in items)
{
    item.Replace("HIJ", "");
}
Console.WriteLine(items.FirstOrDefault().Length);

但它仍然显示 11,这意味着 HIJ 未被删除。如何解决这个问题并得到 8 作为答案。

【问题讨论】:

  • Replace 返回完成替换的字符串副本。它不会改变您调用它的字符串。字符串是不可变的。
  • items.Select(i=>i.Replace("HIJ","")).DefaultIfEmpty("").Length

标签: c# list replace


【解决方案1】:

字符串在 C# 中是不可变的。试试

for (int i = 0; i < items.Length; i++)
    items[i] = items[i].Replace("HIJ", "");

还要注意

foreach (string item in items)

item 无法修改。而且,顺便说一句,foreach 不能用于在源集合中添加或删除项目以避免不可预知的副作用。见http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx

【讨论】:

    【解决方案2】:

    如上所述,字符串是不可变的。 string.Replace() 返回一个新字符串:它不会修改现有字符串。

    但是您可以使用 Linq 在一行中完成此操作,如下所示:

    string[] items = GetMeSomeItems()
                     .Select( s => s.Replace("HIJ","") )
                     .ToArray()
                     ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2021-04-07
      • 1970-01-01
      • 2014-05-14
      相关资源
      最近更新 更多