public static String spellOrdinal(final int ordinal) { if (ordinal <= 12) { return ORDINALS[ordinal]; } if (ordinal % 100 >= 20 && ordinal % 10 == 0) { final String string = spellCardinal(ordinal); return string.substring(0, string.length() - 1) + "ieth"; } if (ordinal > 20 && ordinal % 10 != 0) { final String string = spellCardinal(ordinal / 10 * 10); return string + "-" + ORDINALS[ordinal % 10]; } return spellCardinal(ordinal) + "th"; }
@Nullable public static Long parseOrdinal(final String string) { final String s = string.trim(); final int l = s.length(); for (int i = 0; i < ORDINALS.length; ++i) { if (s.endsWith(ORDINALS[i])) { return parseCardinal(s.substring(0, l - ORDINALS[i].length()) + spellCardinal(i)); } } if (s.endsWith("ieth")) { return parseCardinal(s.substring(0, l - 4) + "y"); } return parseCardinal(s.substring(0, l - 2)); }