我有代码
List<String> words
目前在列表中只有2个计数单词:[0]“abc”,[1]“abc”
通过列表并检查这些单词中是否存在元音的最简单方法是什么?
答案 0 :(得分:1)
您可以使用LINQ查找包含元音的所有单词的列表。
string vowels = "aeiou";
List<string> words = new List<string>() { "apple", "crypt" };
List<string> wordsWithVowels = words.Where(w => w.ToArray().Intersect(vowels.ToArray()).Count() > 0).ToList();
OR
List<string> wordsWithVowels = words.Where(w => w.ToArray().Any(c => vowels.ToArray().Contains(Char.ToLower(c)))).ToList();
使用Char.ToLower区分大小写
答案 1 :(得分:1)
public class VowelChecker
{
private char[] vowels = new [] { 'a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U' };
public bool ContainsVowel(string word)
{
foreach (char vowel in vowels)
{
if (word.Contains(vowel))
{
return true;
}
}
return false;
}
}
用法:
List<string> words = new List<string>();
words.Add("ABC");
words.Add("elephant");
words.Add("FLY");
VowelChecker checker = new VowelChecker();
foreach (string word in words)
{
Console.WriteLine("{0} contains a vowel: {1}", word, checker.ContainsVowel(word));
}
Console.ReadLine();
结果:
答案 2 :(得分:0)
这个问题很容易以各种方式解决......唯一重要的是要知道并非所有地方的小写到大写的转换都是一样的......见http://blog.codinghorror.com/whats-wrong-with-turkey/(开始从字符串开始变得毛茸茸的)
简而言之,在土耳其,i
的大写字母为İ
,而I
的小写字母为ı
。看到不同? : - )
string vowels = "aeiou";
List<string> words = new List<string>() { "APPLE", "crypt" };
List<string> wordsWithVowels = words.Where(w => vowels.Any(v => w.IndexOf(v.ToString(), StringComparison.CurrentCultureIgnoreCase) != -1)).ToList();
或者甚至可能更迂腐正确
CompareInfo comparer = new CultureInfo("en-US").CompareInfo;
List<string> wordsWithVowels = words.Where(w => vowels.Any(v => comparer.IndexOf(w, v, CompareOptions.IgnoreCase) != -1)).ToList();
(其中en-US是你正在寻找元音的语言)
有非常好的方法可以进行不区分大小写的比较,因此使用ToLower()
/ ToUpper()
来执行它们是错误的和错误。
正如我评论的那样,这可能没有实际意义,因为元音的概念是语言连接的,所以在土耳其他们有不同的元音。
请注意,即使是英文,有时y
也是元音(请参阅wiki)
答案 3 :(得分:0)
这感觉就像是作业,但我很无聊。
public int CountVowels(List<string> words)
{
return words.Sum(CountVowels);
}
public int CountVowels(string word)
{
return Enumerable.Range(0, word.Length).Count(i => IsVowel(word, i));
}
public bool IsVowel(string word, int i)
{
if (i < 0) return false;
if (i >= word.length) return false;
switch(word[i].ToLowerCase())
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
return true;
case 'y':
// I'm pretty sure 'y' is a consonant if it follows,
// or is followed by a vowel
return !(IsVowel(word, i-1) || IsVowel(word, i+1));
}
return false;
}