Replace numbers 1..12 with Roman numerals
e.g. "Star Wars: Episode 4" -> "Star Wars: Episode IV"
This commit is contained in:
parent
b6c2329e79
commit
894f76d8bc
|
@ -21,6 +21,7 @@ import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.TreeMap;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -329,6 +330,36 @@ public class ExpressionFormatMethods {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace numbers 1..12 with Roman numerals
|
||||||
|
*
|
||||||
|
* e.g. "Star Wars: Episode 4" -> "Star Wars: Episode IV"
|
||||||
|
*/
|
||||||
|
public static String roman(String self) {
|
||||||
|
TreeMap<Integer, String> numerals = new TreeMap<Integer, String>();
|
||||||
|
numerals.put(10, "X");
|
||||||
|
numerals.put(9, "IX");
|
||||||
|
numerals.put(5, "V");
|
||||||
|
numerals.put(4, "IV");
|
||||||
|
numerals.put(1, "Ⅰ");
|
||||||
|
|
||||||
|
StringBuffer s = new StringBuffer();
|
||||||
|
Matcher m = compile("\\b\\d+\\b").matcher(self);
|
||||||
|
while (m.find()) {
|
||||||
|
int n = Integer.parseInt(m.group());
|
||||||
|
m.appendReplacement(s, n >= 1 && n <= 12 ? roman(n, numerals) : m.group());
|
||||||
|
}
|
||||||
|
return m.appendTail(s).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String roman(Integer n, TreeMap<Integer, String> numerals) {
|
||||||
|
int l = numerals.floorKey(n);
|
||||||
|
if (n == l) {
|
||||||
|
return numerals.get(n);
|
||||||
|
}
|
||||||
|
return numerals.get(l) + roman(n - l, numerals);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply ICU transliteration
|
* Apply ICU transliteration
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue