C# 以 "a" 与 "an" 开头
C# Start with "a" vs "an"
我试图搜索此主题,但找不到任何结果。
我的问题是:有什么办法可以找出单词的前缀吗?无论是 "an" 还是 "a".
例如:
an apple
a house
an old house
an amazon
a vampire
所以我的输入只是单词,然后函数会 return 正确的前缀。
让我们假设任何以元音字母开头的单词都将以 "an" 开头,而所有其他单词将以 "a" 开头。
string getArticle(string forWord)
{
var vowels = new List<char> { 'A', 'E', 'I', 'O', 'U' };
var firstLetter = forWord[0];
var firstLetterCapitalized = char.ToUpper(firstLetter);
var beginsWithVowel = vowels.Contains(firstLetterCapitalized);
if (beginsWithVowel)
return "an";
return "a";
}
是否可以简化和改进? 当然。但是,它应该作为起点。
存在可读性较差但较短的版本,例如:
string getArticle(string forWord) => (new List<char> { 'A', 'E', 'I', 'O', 'U' }).Contains(char.ToUpper(forWord[0])) ? "an" : "a";
但是,这两个都忽略了边缘情况,例如 forWord
为 null 或空。
评论中的链接给出了最全面的回复,但如果你想要一些非常简单的概念来理解,那就是这样的:
通过名词获得不定冠词(前缀):
public static string prefix(string noun)
{
List<string> vowels = new List<string>(){ "A", "E", "I", "O", "U" };
if (string.IsNullOrWhiteSpace(noun) || noun.Length < 2) return null;
else return vowels.Contains(noun.Substring(0, 1).ToUpper()) ? "An" : "A";
}
我试图搜索此主题,但找不到任何结果。 我的问题是:有什么办法可以找出单词的前缀吗?无论是 "an" 还是 "a".
例如:
an apple
a house
an old house
an amazon
a vampire
所以我的输入只是单词,然后函数会 return 正确的前缀。
让我们假设任何以元音字母开头的单词都将以 "an" 开头,而所有其他单词将以 "a" 开头。
string getArticle(string forWord)
{
var vowels = new List<char> { 'A', 'E', 'I', 'O', 'U' };
var firstLetter = forWord[0];
var firstLetterCapitalized = char.ToUpper(firstLetter);
var beginsWithVowel = vowels.Contains(firstLetterCapitalized);
if (beginsWithVowel)
return "an";
return "a";
}
是否可以简化和改进? 当然。但是,它应该作为起点。
存在可读性较差但较短的版本,例如:
string getArticle(string forWord) => (new List<char> { 'A', 'E', 'I', 'O', 'U' }).Contains(char.ToUpper(forWord[0])) ? "an" : "a";
但是,这两个都忽略了边缘情况,例如 forWord
为 null 或空。
评论中的链接给出了最全面的回复,但如果你想要一些非常简单的概念来理解,那就是这样的:
通过名词获得不定冠词(前缀):
public static string prefix(string noun)
{
List<string> vowels = new List<string>(){ "A", "E", "I", "O", "U" };
if (string.IsNullOrWhiteSpace(noun) || noun.Length < 2) return null;
else return vowels.Contains(noun.Substring(0, 1).ToUpper()) ? "An" : "A";
}