Java有一个简单的方法来复数一个单词吗?如果没有,我想知道为什么 Rails 有它时它不可用。
有什么具体原因吗?
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";
}
}
附加使用说明...正如您可能看到的,它希望您传入的任何单词的第一个字母大写(如果不在例外列表中则无关紧要)。有无数种不同的处理方式。它只是满足我们的特殊需求。
看看JBoss 的 Inflector 类。即使您不使用 JBoss,您也可以了解源代码以获得实现此目的的综合方法。