Java: Переворот строки
Переворот строки — простейшая алгоритмическая задача, которую иногда задают на собеседованиях. Правильный способ перевернуть строку — использовать функцию из стандартной библиотеки, но в целях обучения полезно реализовать её самостоятельно.
Один из алгоритмов выглядит так: строим новую строку, перебирая символы исходной строки в обратном порядке.
public static void main(String[] args) {
reverseString("Game Of Thrones"); // => senorhT fO emaG
}
static String reverseString(String str)
{
var index = str.length() - 1;
var reversedString = "";
while (index >= 0) {
var currentChar = str.charAt(index);
reversedString = reversedString + currentChar;
index = index - 1;
}
return reversedString;
}
Разберём функцию построчно:
var index = str.length() - 1
записываем в новую переменную индекс последнего символа строки (напомним, что индексы начинаются с нуля)String reversedString = ""
инициализируем строку, куда будем записывать результатwhile (index >= 0)
условие — повторяем тело цикла, пока текущий индекс не дошёл до0
, то есть до первого символаvar currentChar = str.charAt(index)
берём из строки символ по индексу, в качестве индекса выступает текущее значение счетчика - то есть в каждой итерации индекс будет разныйreversedString = reversedString + currentChar
добавляем в строку-результат этот символ.index = index - 1
обновляем счетчикreturn reversedString
когда цикл завершился, возвращаем строку-результат.
Работая со строками программисты часто допускают ошибку «выход за границы строки». При неправильном подборе начального значения счетчика или ошибке в предикате цикла может получиться ситуация, при которой идёт обращение к несуществующему символу.
Особенно часто забывают о том, что символы в строках индексируются от 0, поэтому индекс первого символа - 0, а последнего - на единицу меньше длины строки.
Задание
Реализуйте функцию mysubstr()
, которая извлекает из строки подстроку указанной длины. Она принимает на вход два аргумента: строку и длину, и возвращает подстроку начиная с первого символа:
var str = 'If I look back I am lost';
mysubstr(str, 1); // 'I'
mysubstr(str, 7); // 'If I lo'
Используйте тот же подход, что в функции для переворота строки из урока: собирайте строку-результат в цикле, перебирая начальную строку до определенного момента.