如何用空格替换列表中的所有元音?以下代码似乎无效。
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
答案 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