Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как перевернуть строку

Короткий ответ

У 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() — Возвращает количество символов в строке.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.