C#替换通用列表中的所有元音

时间:2019-02-11 00:30:59

标签: c# asp.net-core asp.net-core-2.0

如何用空格替换列表中的所有元音?以下代码似乎无效。

        List<string> Instruments = new List<string>();

        Instruments.Add("cello");
        Instruments.Add("guitar");
        Instruments.Add("violin");
        Instruments.Add("double bass");

        string vowels = "a e i o u y";


        Instruments.ForEach(w=>vowels = vowels.Replace(w,""));

预期结果:

cll
gtr
vln

6 个答案:

答案 0 :(得分:3)

尝试一下

var vowels = new List<char> {'a','e','i','o','u','y'};

var result = new List<string>();
Instruments.ForEach(w => result.Add(new string(w.Select(x => vowels.Any(y => y == x) ? ' ' : x).ToArray())));

答案 1 :(得分:1)

您应该使用。选择是否需要更改Collection中的值:

List<string> Instruments = new List<string>();

        Instruments.Add("cello");
        Instruments.Add("guitar");
        Instruments.Add("violin");
        Instruments.Add("double bass");

        var regex = new Regex("^a|e|i|o|u", RegexOptions.IgnoreCase);

        var withoutVowels = from instr in Instruments
            select regex.Replace(instr, string.Empty);

        foreach (var item in withoutVowels)
        {
            Console.WriteLine(item);
        }

答案 2 :(得分:0)

有点脏又脏,但这对我有用。

  List<string> Instruments = new List<string>();
  var newList = new List<String>();

  Instruments.Add("cello");
  Instruments.Add("guitar");
  Instruments.Add("violin");
  Instruments.Add("double bass");

  List<string> vowels = new List<string> { "a", "e", "i", "o", "u", "y" };

  Instruments.ForEach(w =>
  {
    var temp = w;
    vowels.ForEach(v =>
    {
      temp = temp.Replace(v, "");
    });
    newList.Add(temp);
  });

  newList.ForEach(w => Console.WriteLine(w));

答案 3 :(得分:0)

Instruments中包含string或单词的集合。您的.ForEach遍历每个实例为w的集合,但是您在此处使用.Replace不会影响这些实例,而是在操作中使用它们来影响字符串vowels

请参阅String.Replace MSN文档。

因此,您还需要遍历vowels string,并使用char的{​​{1}}实例:vowels,其中{{1 }}是您在w.Replace(v, " ")中的单词实例,而w是您在Instruments中的元音实例:

因此,它应该是v

注意:@mjwills在注释中指出了此操作的另一个问题。 vowels的分配不会在此处保留。因此,您将需要以某种方式创建新的Instruments.ForEach(w => foreach (vowelChar in vowels.split(" ")) { w.Replace(vowelChar, " "); });来保留它(要么事先声明并在迭代中添加,要么使用Linq w扩展List<string>。< / p>


但是,由于您实际上是在.ToList<T>的每次迭代中使用IEnumerable<T>char[] vowels创建一个string,所以效率很低。

相反,您应该将.Split定义为Instruments,以避免该操作的必要性:vowels

char[]

编辑:迭代中分配给var vowels = new char[] {'a','e','i','o','u', 'y'};的{​​{1}}实例不会持久,因此您需要为结果创建一个 List<string> Instruments = new List<string>(); Instruments.Add("cello"); Instruments.Add("guitar"); Instruments.Add("violin"); Instruments.Add("double bass"); char[] vowels = new char[] {'a','e','i','o','u','y'}; Instruments.ForEach(w => { foreach (char v in vowels) { w = w.Replace(v, ' '); } }); 的新实例。

w

答案 4 :(得分:0)

您可以使用Regex尝试相同的操作

public void ReplaceAllVowels()
{
    List<string> Instruments = new List<string>();

    Instruments.Add("cello");
    Instruments.Add("guitar");
    Instruments.Add("violin");
    Instruments.Add("double bass");

    var pattern = new Regex("[aeiouy]");
    var lst = Instruments.Select(i => pattern.Replace(i, "")).ToList();
    foreach (var item in lst)
    {
        Console.WriteLine(item);
    }
}

答案 5 :(得分:0)

这对我来说很好:

List<string> Instruments = new List<string>();

Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");

string vowels = "aeiouy";

var results = vowels.Aggregate(Instruments,
    (i, v) => i.Select(x => x.Replace(v.ToString(), "")).ToList());

我得到:

cll 
gtr 
vln 
dbl bss