基于某些集合大小处理单数/复数单词的有效方法

lim*_*imc 16 java jsp jsp-tags

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

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

顺便说一句,我使用Java.

非常感谢.

Jac*_*son 28

看一下inflector,一个允许你做的java项目Noun.pluralOf("user"),或者Noun.pluralOf("user", userList.size()),它处理一堆变化和不寻常的情况(人 - >人,面包 - >面包等),以及让你定义自定义映射规则必要时.

  • 可用于Java的丰富内容令人惊叹!感谢您提供此信息,这可以让我和其他人一起进入RoR的行列.+1.接下来:KitchenSink.jar :) (2认同)
  • 如果您无法像我这样访问java.net上的Inflector项目,可以从这里获取:http://mirrors.ibiblio.org/pub/mirrors/maven2/net/java/dev/inflector/inflector/0.7 0.0 / (2认同)

Jay*_*Jay 10

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

public String singlePlural(int count, String singular, String plural)
{
  return count==1 ? singular : plural;
}
Run Code Online (Sandbox Code Playgroud)

通话看起来像:

singlePlural(count, "user", "users");
singlePlural(count, "baby", "babies");
singlePlural(count, "person", "people");
singlePlural(count, "cherub", "cherubim");
... etc ...
Run Code Online (Sandbox Code Playgroud)

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

编辑

突然之间,我发现你所寻找的是一个一般制作复数的功能,体现了一系列规则,如"通常只是加's',但如果单词以'y'结尾,则将'y'改为'ies' ',如果以's结尾'将其改为'ses',......"等我用英语认为这对任何实际目的都是不可能的:有太多特殊情况,比如"人/人"和"孩子/孩子等等.我认为你能做的最好的事情就是拥有一个通用的"添加''规则,可能还有一些其他常见案例,然后是一长串例外情况.也许在其他语言中,人们可能会提出一个相当简单的规则.

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