StringBuffer.reverse: примеры (JAVA)

Метод reverse() класса StringBuffer: полное руководство
Раздел: Строки (String) - части строк (StringBuilder, StringBuffer)
StringBuffer.reverse: StringBuffer

Описание метода reverse()

Метод reverse() класса StringBuffer изменяет последовательность символов в буфере на обратную. Он не принимает аргументов и возвращает ссылку на тот же изменённый объект StringBuffer. Метод удобен, когда требуется развернуть строку без создания нового объекта, например, для проверки палиндромов, обратной сортировки или построения строк. Так как StringBuffer синхронизирован (thread-safe), вызов безопасен в многопоточной среде.

Примеры использования

Пример 1: разворот простого слова.

StringBuffer sb = new StringBuffer("Hello");
sb.reverse();
System.out.println(sb);
olleH

Пример 2: разворот и дальнейшее добавление символов.

StringBuffer sb = new StringBuffer("123");
sb.reverse().append("abc");
System.out.println(sb);
321abc

Пример 3: использование в цепочке с другими методами.

StringBuffer sb = new StringBuffer("Java");
sb.reverse().insert(0, "Top ");
System.out.println(sb);
Top avaJ

Альтернативы в Java

В Java существует класс StringBuilder, который имеет аналогичный метод reverse(). Главное отличие: StringBuilder не синхронизирован, поэтому он быстрее и предпочтительнее в однопоточных сценариях. Если синхронизация не требуется, следует использовать StringBuilder. Также можно развернуть строку вручную через цикл или рекурсию, но это менее эффективно и не рекомендуется.

Альтернативы в других языках

PHP: функция strrev() возвращает новую перевёрнутую строку.

echo strrev("Hello");
olleH

JavaScript: комбинация методов split(), reverse(), join().

"Hello".split('').reverse().join('');
"olleH"

Python: срез строки с шагом -1.

"Hello"[::-1]
'olleH'

SQL (MySQL): функция REVERSE().

SELECT REVERSE('Hello');
olleH

C#: разворот массива символов.

char[] arr = "Hello".ToCharArray();
Array.Reverse(arr);
Console.WriteLine(new string(arr));
olleH

Lua: функция string.reverse().

print(string.reverse("Hello"))
olleH

Go: разворот среза рун.

s := []rune("Hello")
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
	s[i], s[j] = s[j], s[i]
}
fmt.Println(string(s))
olleH

Kotlin: функция расширения reversed() для строк.

println("Hello".reversed())
olleH

Во всех языках результат - новая строка, тогда как в Java StringBuffer.reverse() изменяет существующий объект.

Типичные ошибки

Ошибка 1: вызов метода на null ссылке.

StringBuffer sb = null;
sb.reverse(); // NullPointerException
Exception in thread "main" java.lang.NullPointerException

Ошибка 2: ожидание, что метод вернёт новую строку, а не изменит исходную.

StringBuffer sb = new StringBuffer("abc");
String result = sb.reverse().toString(); // sb теперь "cba"
System.out.println(sb); // cba, а не abc
cba

Ошибка 3: использование StringBuffer.reverse() в однопоточном контексте, когда достаточно StringBuilder - излишняя синхронизация снижает производительность.

Изменения в последних версиях Java

Метод reverse() присутствует с Java 1.0. За последние версии (Java 8–21) сигнатура и поведение не менялись. Внутренние реализации могли быть оптимизированы (например, использование @HotSpotIntrinsicCandidate для ускорения), но это не влияет на контракт метода.

Расширенные примеры

Пример 1: разворот строки с проверкой на палиндром.

Пример java
StringBuffer sb = new StringBuffer("А роза упала на лапу Азора");
StringBuffer rev = new StringBuffer(sb).reverse();
boolean isPalindrome = sb.toString().equalsIgnoreCase(rev.toString());
System.out.println(isPalindrome);
true

Пример 2: многократный разворот (возврат к исходному состоянию).

Пример java
StringBuffer sb = new StringBuffer("123");
sb.reverse();
System.out.println(sb); // 321
sb.reverse();
System.out.println(sb); // 123
321
123

Пример 3: использование reverse() внутри синхронизированного блока для гарантии атомарности.

Пример java
StringBuffer sb = new StringBuffer("thread");
synchronized (sb) {
    sb.reverse();
    // другие операции
}
(нет вывода, но операция безопасна)

Пример 4: разворот буфера с последующей вставкой в середину.

Пример java
StringBuffer sb = new StringBuffer("abcdef");
sb.reverse();
System.out.println(sb); // fedcba
sb.insert(3, "123");
System.out.println(sb); // fed123cba
fedcba
fed123cba

Пример 5: сравнение производительности StringBuffer.reverse() и ручного разворота через цикл для больших строк (иллюстрация, результат может отличаться).

Пример java
StringBuffer sb = new StringBuffer("a".repeat(100000));
long start = System.nanoTime();
sb.reverse();
long end = System.nanoTime();
System.out.println("StringBuffer.reverse(): " + (end - start) + " ns");
StringBuffer.reverse(): 12500 ns (пример)

джава StringBuffer.reverse function comments

En
StringBuffer.reverse Causes this character sequence to be replaced by the reverse of the sequence