Java: Обход строк
С помощью циклов обрабатывают числа и работают со строками. Строка состоит из символов, и до каждого символа можно добраться по его индексу. Индексы начинаются с нуля, поэтому первый символ строки "Arya" имеет индекс 0, а последний — индекс length() - 1.
Получить символ по индексу позволяет метод charAt(), а узнать длину строки — метод length(). Этих двух методов и счетчика достаточно, чтобы пройти строку символ за символом. Ниже пример кода, который печатает буквы слова на отдельных строках:
public static void printNameBySymbol(String name) {
var i = 0;
// Такая проверка выполняется до конца строки,
// включая последний символ. Его индекс `length() - 1`.
while (i < name.length()) {
// Обращаемся к символу по индексу
System.out.println(name.charAt(i));
i = i + 1;
}
}
var name = "Arya";
App.printNameBySymbol(name);
// "A"
// "r"
// "y"
// "a"Цикл проходит по каждому символу строки по очереди:
"Arya"
│ │ │ │
A r y a
↓ ↓ ↓ ↓
каждый символ обрабатывается по очередиГлавное в этом коде — поставить правильное условие в while. Сделать это можно двумя способами:
i < name.length()i <= name.length() - 1
Оба способа приводят к одному результату. Первый встречается чаще, потому что в нем меньше арифметики.
Обход в обратном порядке
Счетчик не обязан расти от нуля. Если начать с последнего индекса и уменьшать его до нуля, строка пройдется задом наперед. Напишем метод, который печатает символы слова в обратном порядке:
public static void printReversed(String name) {
// Начинаем с последнего символа
var i = name.length() - 1;
while (i >= 0) {
System.out.println(name.charAt(i));
i = i - 1;
}
}
App.printReversed("Arya");
// "a"
// "y"
// "r"
// "A"Здесь счетчик i стартует со значения name.length() - 1, двигается к нулю и завершает цикл, когда становится меньше нуля. На каждом шаге метод берет символ по текущему индексу и печатает его. Направление обхода задает только начальное значение счетчика и способ его изменения.
Задание
Реализуйте статический метод App.printReversedNameBySymbol(), который печатает переданное слово посимвольно, как в примере из теории, но делает это в обратном порядке.
var name = "Arya";
App.printReversedNameBySymbol(name);
// 'a'
// 'y'
// 'r'
// 'A'Полезное
Java: Обход строк
С помощью циклов обрабатывают числа и работают со строками. Строка состоит из символов, и до каждого символа можно добраться по его индексу. Индексы начинаются с нуля, поэтому первый символ строки "Arya" имеет индекс 0, а последний — индекс length() - 1.
Получить символ по индексу позволяет метод charAt(), а узнать длину строки — метод length(). Этих двух методов и счетчика достаточно, чтобы пройти строку символ за символом. Ниже пример кода, который печатает буквы слова на отдельных строках:
public static void printNameBySymbol(String name) {
var i = 0;
// Такая проверка выполняется до конца строки,
// включая последний символ. Его индекс `length() - 1`.
while (i < name.length()) {
// Обращаемся к символу по индексу
System.out.println(name.charAt(i));
i = i + 1;
}
}
var name = "Arya";
App.printNameBySymbol(name);
// "A"
// "r"
// "y"
// "a"Цикл проходит по каждому символу строки по очереди:
"Arya"
│ │ │ │
A r y a
↓ ↓ ↓ ↓
каждый символ обрабатывается по очередиГлавное в этом коде — поставить правильное условие в while. Сделать это можно двумя способами:
i < name.length()i <= name.length() - 1
Оба способа приводят к одному результату. Первый встречается чаще, потому что в нем меньше арифметики.
Обход в обратном порядке
Счетчик не обязан расти от нуля. Если начать с последнего индекса и уменьшать его до нуля, строка пройдется задом наперед. Напишем метод, который печатает символы слова в обратном порядке:
public static void printReversed(String name) {
// Начинаем с последнего символа
var i = name.length() - 1;
while (i >= 0) {
System.out.println(name.charAt(i));
i = i - 1;
}
}
App.printReversed("Arya");
// "a"
// "y"
// "r"
// "A"Здесь счетчик i стартует со значения name.length() - 1, двигается к нулю и завершает цикл, когда становится меньше нуля. На каждом шаге метод берет символ по текущему индексу и печатает его. Направление обхода задает только начальное значение счетчика и способ его изменения.
Задание
Реализуйте статический метод App.printReversedNameBySymbol(), который печатает переданное слово посимвольно, как в примере из теории, но делает это в обратном порядке.
var name = "Arya";
App.printReversedNameBySymbol(name);
// 'a'
// 'y'
// 'r'
// 'A'Полезное
Ваше упражнение проверяется по этим тестам
import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
class AppTest {
public static void main(String[] args) {
final var expected = "t\ne\nl\nx\ne\nH";
App.printReversedNameBySymbol("Hexlet");
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
App.printReversedNameBySymbol("Hexlet");
final var actual = out.toString().trim();
assertThat(actual).isEqualTo(expected);
}
}Решение учителя откроется через:
20:00
