Is there a way in Java to convert an integer to its ordinal name?

后端 未结 12 1312
生来不讨喜
生来不讨喜 2020-11-27 15:12

I want to take an integer and get its ordinal, i.e.:

1 -> \"First\"
2 -> \"Second\"
3 -> \"Third\"
...
12条回答
  •  渐次进展
    2020-11-27 16:01

    If you're OK with "1st", "2nd", "3rd" etc, here's some simple code that will correctly handle any integer:

    public static String ordinal(int i) {
        String[] sufixes = new String[] { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" };
        switch (i % 100) {
        case 11:
        case 12:
        case 13:
            return i + "th";
        default:
            return i + sufixes[i % 10];
    
        }
    }
    

    Here's some tests for edge cases:

    public static void main(String[] args) {
        int[] edgeCases = { 0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 100, 101, 102, 103, 104, 111, 112, 113, 114 };
        for (int edgeCase : edgeCases) {
            System.out.println(ordinal(edgeCase));
        }
    }
    

    Output:

    0th
    1st
    2nd
    3rd
    4th
    5th
    10th
    11th
    12th
    13th
    14th
    20th
    21st
    22nd
    23rd
    24th
    100th
    101st
    102nd
    103rd
    104th
    111th
    112th
    113th
    114th
    

提交回复
热议问题