嗨,所以我尝试用相应的罗马数字替换字符串中的数字,并且该方法应仅在给定的startPos和endPos之间操纵字符串。
例如,如果字符串为: “ H3ll0,您需要做的15 ar3您要做1n9” ,并且startPos = 1,endPos = 14
它应该打印出:“ HIIIll0,您正在做IVAR3吗?”
这是我的方法:
public void convertToRoman(int startPos, int endPos){
for (int i = startPos-1; i < endPos; i++) {
if (romanNum.contains("1")) {
romanNum = romanNum.replace("1", "I");
}
if (romanNum.contains("2")) {
romanNum = romanNum.replace("2", "II");
}
if (romanNum.contains("3")) {
romanNum = romanNum.replace("3", "III");
}
if (romanNum.contains("4")) {
romanNum = romanNum.replace("4", "IV");
}
if (romanNum.contains("5")) {
romanNum = romanNum.replace("5", "V");
}
if (romanNum.contains("6")) {
romanNum = romanNum.replace("6", "VI");
}
if (romanNum.contains("7")) {
romanNum = romanNum.replace("7", "VII");
}
if (romanNum.contains("8")) {
romanNum = romanNum.replace("8", "VIII");
}
if (romanNum.contains("9")) {
romanNum = romanNum.replace("9", "IX");
}
}
System.out.print(romanNum);
}
*** btw现在,无论给定索引如何,它都在操纵整个字符串
答案 0 :(得分:0)
接下来的方法会很好。
char[] chars = romanNum.toCharArray();
String s = "";
for (int i = startPos-1; i < endPos; i++) {
if (chars[i] == '1') {
s += "I";
}
if (chars[i] == '2') {
s += "II";
}
...
else {
s += chars[i]
}
}
System.out.print(s);
答案 1 :(得分:0)
你可以在那做。
String a = "H3ll0, wh4t 15 ar3 you do1n9";
int startPos = 1;
int endPos = 14;
String beginSubstring = a.substring(0,startPos);
String substring = a.substring(startPos, endPos);
String lastSubstring = a.substring(endPos);
String resultOperation =operation(substring);
String result = beginSubstring+resultOperation+lastSubstring;
答案 2 :(得分:0)
String.replace
替换找到的匹配项的第一个实例,它没有替换的任何索引范围。相反,您应该遍历字符串中的各个字符,如果匹配替换项,则一次替换一个;
Map<Character, String> replacements = new HashMap<>();
replacements.put('1', "I");
replacements.put('2', "II");
replacements.put('3', "III");
//etc
StringBuilder sb = new StringBuilder(romanNum.length());
if (startPos > 0) {
sb.append(romanNum, 0, startPos);
}
for(int i=startPos; i <= endPos; i++) {
char c = romanNum.charAt(i);
sb.append(replacements.getOrDefault(c, Character.toString(c)));
}
if (endPos + 1 < romanNum.length()) {
sb.append(romanNum.substring(endPos + 1));
}
String result = sb.toString();