如何在给定索引内操作字符串?爪哇

时间:2020-02-21 00:18:11

标签: java

嗨,所以我尝试用相应的罗马数字替换字符串中的数字,并且该方法应仅在给定的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现在,无论给定索引如何,它都在操纵整个字符串

3 个答案:

答案 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();