Индекс списка Java вне диапазона

#java #indexing #range

#java #индексирование #диапазон

Вопрос:

В Java, каков наилучший способ переключения символов в строке при сохранении остальных символов в их исходном месте. Меня действительно беспокоит, есть ли способ справиться с этой ошибкой индекса вне диапазона, кроме следующего: допустим, вы хотите заменить букву r заглавной буквой E в «stringExample».

вы можете разделить это на «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. «r» и «E» — это просто случайные буквы, которые я выбрал в качестве примера. Этот метод предназначен для переключения любых букв, когда вторая буква идет перед первой буквой. Циклы, которые я использовал: for (int i=0; i< s.length() -1; i=i 1) и внутри этого цикла for(int k=0; k< s.length;k = k 1)

Ответ №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) , например.