package org.lodder.subtools.sublibrary.control;
/** Source: http://rosettacode.org/wiki/Roman_numerals/Decode#Java_2
* */
public class Roman {
private static int decodeSingle(char letter) {
switch (letter) {
case 'M':
return 1000;
case 'D':
return 500;
case 'C':
return 100;
case 'L':
return 50;
case 'X':
return 10;
case 'V':
return 5;
case 'I':
return 1;
default:
return 0;
}
}
public static int decode(String roman) {
int result = 0;
String uRoman = roman.toUpperCase(); // case-insensitive
for (int i = 0; i < uRoman.length() - 1; i++) {// loop over all but the last character
// if this character has a lower value than the next character
if (decodeSingle(uRoman.charAt(i)) < decodeSingle(uRoman.charAt(i + 1))) {
// subtract it
result -= decodeSingle(uRoman.charAt(i));
} else {
// add it
result += decodeSingle(uRoman.charAt(i));
}
}
// decode the last character, which is always added
result += decodeSingle(uRoman.charAt(uRoman.length() - 1));
return result;
}
}