#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)
, например.