Как перевернуть строку
Короткий ответ
У String нет метода reverse(), но он есть у StringBuilder:
void main() {
String reversed = new StringBuilder("Java").reverse().toString();
IO.println(reversed);
}Результат:
avaJЦиклом
Так же можно собрать строку вручную, идя по символам с конца:
void main() {
String text = "hello";
var result = new StringBuilder();
for (int i = text.length() - 1; i >= 0; i--) {
result.append(text.charAt(i));
}
IO.println(result);
}Результат:
ollehПеревернуть слова
Чтобы поменять порядок слов, а не букв, разбейте строку и разверните список:
void main() {
var words = new ArrayList<>(List.of("one two three".split(" ")));
Collections.reverse(words);
IO.println(String.join(" ", words));
}Результат:
three two oneЭмодзи и редкие символы
StringBuilder.reverse() правильно обрабатывает символы из двух char (суррогатные пары), например большинство эмодзи. Ручной цикл по charAt() их ломает:
void main() {
String text = "ok👍";
IO.println(new StringBuilder(text).reverse());
IO.println(text.length());
}Результат:
👍ko
4Длина строки — 4, хотя видно три символа: эмодзи занимает два char.
Частая ошибка
Ожидать, что reverse() изменит исходную строку. Строки в Java неизменяемы — результат надо сохранить:
void main() {
String word = "abc";
new StringBuilder(word).reverse();
IO.println(word);
}Результат:
abcФункции из этого ответа
- StringBuilder.reverse() — Переворачивает содержимое StringBuilder задом наперёд.
- String.charAt() — Возвращает символ строки по индексу.
- String.length() — Возвращает количество символов в строке.