用Java多元化的方法

时间:2013-04-24 18:46:38

标签: java pluralize

Java是否有一种直接的方法来复数单词?如果没有,我想知道为什么当Rails有一个时它不可用。

任何具体原因?

2 个答案:

答案 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,也可以使用源代码来获得实现此目的的综合方法。