C#以“a”与“an”开头[重复]
Posted
技术标签:
【中文标题】C#以“a”与“an”开头[重复]【英文标题】:C# Start with "a" vs "an" [duplicate] 【发布时间】:2020-03-30 15:27:10 【问题描述】:我已尝试搜索此主题,但找不到任何结果。 我的问题是:有没有办法找出一个单词的前缀?无论是“an”还是“a”。
例如:
an apple
a house
an old house
an amazon
a vampire
所以我的输入只是单词,然后一个函数会返回正确的前缀。
【问题讨论】:
你的意思是你输入,也就是说,说“老房子”,你想知道哪篇文章适用于它? programmatically-determine-whether-to-describe-an-object-with-a-or-an 有很多答案,包括在 C# 中 仅供参考,这不是“前缀”,即不定冠词。 【参考方案1】:假设任何以元音开头的单词都以“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 或为空。
【讨论】:
【参考方案2】:cmets 中的链接给出了最全面的答复,但如果您想要一些非常简单的东西来理解这个概念,它会是这样的:
要获得不定冠词(前缀),请通过名词:
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";
【讨论】:
以上是关于C#以“a”与“an”开头[重复]的主要内容,如果未能解决你的问题,请参考以下文章
名称不能以''字符开头,在c#中使用xml字符串的十六进制值0x20 [重复]
starts with an A and ends with an N是什么意思?