基于某些集合大小处理单复数单词的有效方法 [已关闭]

2022-09-03 03:49:54

在我的工作项目中,有很多实例,我需要在句子中显示某些集合的大小。例如,如果集合的大小为 5,则将显示“5 个用户”。如果它的大小为 1 或 0,它将显示“1 个用户”或“0 个用户”。现在,我正在使用if-else语句来确定是否打印“s”,这很乏味。

我想知道是否有一个开源的JSP自定义标签库允许我完成这个任务。我知道我可以自己写一个...基本上,它将有2个参数,如下所示:。根据集合大小,它将确定是否追加“s”。但是,这个实现不会太健壮,因为我还需要处理“ies”,而有些单词不会使用其中任何一个。因此,我希望有一个更强大的库,而不是创建一个半生不熟的工具,我可以立即使用。在这种情况下,我不太担心在单词前面加上is/are。<lib:display word="user" collection="userList" />

顺便说一句,我使用Java。

非常感谢。


答案 1

看看 inflector,一个 java 项目,它允许您执行 , 或 ,它处理一堆变体和异常情况(人>人、面包>面包等),并允许您在必要时定义自定义映射规则。Noun.pluralOf("user")Noun.pluralOf("user", userList.size())


答案 2

嗯,我不太明白为什么你需要一个库。我认为这样做的功能是微不足道的:

public String singlePlural(int count, String singular, String plural)
{
  return count==1 ? singular : plural;
}

呼叫将如下所示:

singlePlural(count, "user", "users");
singlePlural(count, "baby", "babies");
singlePlural(count, "person", "people");
singlePlural(count, "cherub", "cherubim");
... etc ...

也许这个库做了很多其他事情,使它有用。我想你可以说它提供了所有复数形式的字典,但是在任何给定的程序中,你都不关心语言中所有单词的复数,只关心你在这个程序中使用的复数。我想如果可能是单数或复数的单词在编译时不知道,如果它是用户输入的东西,那么我想要一个第三方字典,而不是试图自己构建一个。

编辑

突然间,我突然想到,你正在寻找的是一个通用复数的函数,体现了一组规则,例如“通常只是添加's',但如果单词以'y'结尾,则将'y'更改为'ies',如果它以's'结尾,则将其更改为'ses',......”等。我认为在英语中,这对于任何实际目的都是不可能的:有太多的特殊情况,如“人/人”和“儿童/儿童”等。我认为你能做的最好的事情就是有一个通用的“添加一个's'”规则,也许是其他一些常见情况,然后是一长串的例外。也许在其他语言中,人们可以提出一个相当简单的规则。

因此,正如我所说,如果这个词在编译时不知道,而是来自一些用户输入,那么是的,第三方字典是非常可取的。