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是什么意思?

如何选择仅以特定前缀开头的字符串

使用正则表达式拆分以特定字符开头和结尾的组[重复]

在c#中使用内容设置href元素的innerText以~/开头

如果 href 以 http://www.twitter.com/ 开头,则将类添加到 <a> [重复]