Java是否有一种直接的方法来复数单词?如果没有,我想知道为什么当Rails有一个时它不可用。
任何具体原因?
答案 0 :(得分:6)
jtahlborn在语言特异性方面有一个很好的观点。也就是说,这就是我在我们的应用程序中使用的内容。它并不全面,但是当您点击它们时添加异常很容易。
这是C#,但应该足够接近或者你要适应:
public string GetPlural(string singular)
{
string CONSONANTS = "bcdfghjklmnpqrstvwxz";
switch (singular)
{
case "Person":
return "People";
case "Trash":
return "Trash";
case "Life":
return "Lives";
case "Man":
return "Men";
case "Woman":
return "Women";
case "Child":
return "Children";
case "Foot":
return "Feet";
case "Tooth":
return "Teeth";
case "Dozen":
return "Dozen";
case "Hundred":
return "Hundred";
case "Thousand":
return "Thousand";
case "Million":
return "Million";
case "Datum":
return "Data";
case "Criterion":
return "Criteria";
case "Analysis":
return "Analyses";
case "Fungus":
return "Fungi";
case "Index":
return "Indices";
case "Matrix":
return "Matrices";
case "Settings":
return "Settings";
case "UserSettings":
return "UserSettings";
default:
// Handle ending with "o" (if preceeded by a consonant, end with -es, otherwise -s: Potatoes and Radios)
if (singular.EndsWith("o") && CONSONANTS.Contains(singular[singular.Length - 2].ToString()))
{
return singular + "es";
}
// Handle ending with "y" (if preceeded by a consonant, end with -ies, otherwise -s: Companies and Trays)
if (singular.EndsWith("y") && CONSONANTS.Contains(singular[singular.Length - 2].ToString()))
{
return singular.Substring(0, singular.Length - 1) + "ies";
}
// Ends with a whistling sound: boxes, buzzes, churches, passes
if (singular.EndsWith("s") || singular.EndsWith("sh") || singular.EndsWith("ch") || singular.EndsWith("x") || singular.EndsWith("z"))
{
return singular + "es";
}
return singular + "s";
}
}
另一个使用说明......正如您可能看到的那样,它希望您传入的任何单词都将首字母大写(如果它不在例外列表中则无关紧要)。有许多不同的处理方法。它完全符合我们的特殊需求。
答案 1 :(得分:0)
看看JBoss's Inflector class。即使您不使用JBoss,也可以使用源代码来获得实现此目的的综合方法。