0

Java有一个简单的方法来复数一个单词吗?如果没有,我想知道为什么 Rails 有它时它不可用。

有什么具体原因吗?

4

2 回答 2

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";

    }
}

附加使用说明...正如您可能看到的,它希望您传入的任何单词的第一个字母大写(如果不在例外列表中则无关紧要)。有无数种不同的处理方式。它只是满足我们的特殊需求。

于 2013-04-24T18:53:16.017 回答
0

看看JBoss 的 Inflector 类。即使您不使用 JBoss,您也可以了解源代码以获得实现此目的的综合方法。

于 2020-07-22T15:59:48.013 回答