Java列表索引超出范围

时间:2016-10-16 02:30:04

标签: java indexing range

在java中,在字符串中切换字符同时将其余字符保留在原始位置的最佳方法是什么。 我真正担心的是,如果有以下方法可以处理此索引超出范围错误: 我们假设你要用#34; stringExample"中的大写字母E来切换字母r。

你可以将其分成" st" +" r" +" ing" +" E" +" xample"

---------------------------->(0,I) - (I,I + 1) - ( I + 1,K) - (K,K + 1)---(K + 1)

然后切换" r" &安培; " E":" st" +" E" +" ing" +" r" +" xample"

----------------------------->(0,I) - (K,K + 1) - 第(i + 1,K) - (I,I + 1)---(K + 1)

唯一的问题是如果k是最后一个索引,那么你需要写一个if语句来捕获这个异常。除了做我之前建议的,有更好的方法来切换这些字母?

1 个答案:

答案 0 :(得分:1)

如果您只想替换字符串中的字符,最好使用String.substring完全重建字符串。例如:

String swapLetters(String str, int firstIndex, int secondIndex) {
    if (firstIndex < 0 || firstIndex >= str.length()) {
        throw new IndexOutOfBoundsException("firstIndex '" + firstIndex + "' is out of bounds.");
    } else if (secondIndex < 0 || secondIndex >= str.length()) {
        throw new IndexOutOfBoundsException("secondIndex '" + secondIndex + "' is out of bounds.");
    } else if (firstIndex >= secondIndex) {
        throw new IndexOutOfBoundsException("firstIndex isn't before secondIndex");
    }


    StringBuilder newString = new StringBuilder(str.substring(0, firstIndex));
    newString.append(str.charAt(secondIndex)).append(str.substring(firstIndex + 1, secondIndex))
             .append(str.charAt(firstIndex)).append(str.substring(secondIndex + 1));

    return newString.toString();
}

在这里,即使它是最后一个字母,子字符串也会返回一个空字符串,它会没问题。

System.out.println("stringExample becomes " + swapLetters("stringExample", 2, 12)); //--> stringExample becomes steingExamplr
System.out.println("stringExample becomes " + swapLetters("stringExample", 2, 6)); //--> stringExample becomes stEingrxample

如果您只想替换给定字母的每个字母的第一个实例,例如,您可以使用indexOf('r')代替charAt(2)