在c#中是否有任何算法可以单数化 - 复数一个单词(英文)或者确实存在.net库来执行此操作(也可能使用不同的语言)?
您还有System.Data.Entity.Design.PluralizationServices.PluralizationService.
更新:旧答案值得更新.现在还有Humanizer:https://github.com/MehdiK/Humanizer
我可以为世界语做这件事,没有特殊情况!
string plural(string noun) { return noun + "j"; }
对于英语,熟悉名词的常数复数规则以及名词的不规则复数将是有用的.关于英语复数的整篇维基百科文章也可能有一些有用的信息.
大多数ORM都会对它进行刺激,尽管它们通常并不完美.我知道Castle有它的Inflector Class你可能会四处寻找."完美"这样做并不是一件容易的事(英语"规则"不是真正的规则:)),所以这取决于你是否对"合理的猜测"方法感到满意.
我在Java中作弊 - 我希望能够为"有一些东西"生成一个正确的字符串,所以我写了这篇文章.小重载实用方法:
static public String pluralize(int val, String sng) { return pluralize(val,sng,(sng+"s")); } static public String pluralize(int val, String sng, String plu) { return (val+" "+(val==1 ? sng : plu)); }
像这样调用
System.out.println("There were "+pluralize(count,"something")); System.out.println("You have broken "+pluralize(count,"knife","knives"));
我根据Rails复数器一起鞭打了一个.你可以在这里看到我的博客文章,或者在这里看到github
output = Formatting.Pluralization(100, "sausage");
我在.net(C#)中创建了一个小型库,称为Pluralizer(不出所料).
这意味着使用完整的句子,像String.Format那样.
它基本上是这样的:
var target = new Pluralizer(); var str = "There {is} {_} {person}."; var single = target.Pluralize(str, 1); Assert.AreEqual("There is 1 person.", single); // Or use the singleton if you're feeling dirty: var several = Pluralizer.Instance.Pluralize(str, 47); Assert.AreEqual("There are 47 people.", several);
它也可以做更多的事情.在我的博客上阅读更多相关信息.它也可以在NuGet中使用.
由于问题是针对C#的,因此这是Software Monkey解决方案的一个不错的变体(再次有点“作弊”,但对我而言,确实是最实用且可重用的方式):
public static string Pluralize(this string singularForm, int howMany) { return singularForm.Pluralize(howMany, singularForm + "s"); } public static string Pluralize(this string singularForm, int howMany, string pluralForm) { return howMany == 1 ? singularForm : pluralForm; }
用法如下:
"Item".Pluralize(1) = "Item" "Item".Pluralize(2) = "Items" "Person".Pluralize(1, "People") = "Person" "Person".Pluralize(2, "People") = "People"