首先關閉所有你要檢查如果給定的羅馬數字是否有效。因此,該方法可能如下所示:
public static boolean isValid(String romanNumber) {
String pattern = "[m|d|c|l|x|v|i]*";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(romanNumber);
return m.matches();
}
然後,您可以在您的轉換器方法中使用這一個。做完這些之後,有必要轉換羅馬字符串中的每個字符。所以你可以通過創建一個switch函數來實現,它可以在for循環中使用。
public static int convertCharacter(String romanNumber, int position) {
char c = romanNumber.charAt(position);
switch (c) {
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;
}
}
由於您是Java新手,因此我會告訴您如何編寫轉換器方法。這不是最好的解決方案,但它對我有用。使用這一個,它也可以轉換像「MCMXCIX」這樣的數字。
我刪除了評論。所以試着去理解代碼的作用。否則,你不會從中學習。
public static int convertRomanNumber(String romanNumber) {
romanNumber = romanNumber.toLowerCase();
if (!isValid(romanNumber)) {
System.out.println("Invalid character detected");
System.exit(0);
}
int result = 0;
int currentNumber;
int nextNumber;
for (int i = 0; i < romanNumber.length(); i++) {
currentNumber = convertCharacter(romanNumber, i);
if (i < romanNumber.length() - 1) {
nextNumber = convertCharacter(romanNumber, i + 1);
if (nextNumber > currentNumber) {
result += currentNumber * -1;
} else {
result += currentNumber;
}
} else {
result += currentNumber;
}
}
System.out.println("Your input: " + romanNumber.toUpperCase());
return result;
}
我希望它可以幫助你的未來。
一切順利。
嘗試正則表達式和模式匹配 –