StringBuffer.reverse: примеры (JAVA)
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(); // NullPointerExceptionException in thread "main" java.lang.NullPointerException
Ошибка 2: ожидание, что метод вернёт новую строку, а не изменит исходную.
StringBuffer sb = new StringBuffer("abc");
String result = sb.reverse().toString(); // sb теперь "cba"
System.out.println(sb); // cba, а не abccba
Ошибка 3: использование StringBuffer.reverse() в однопоточном контексте, когда достаточно StringBuilder - излишняя синхронизация снижает производительность.
Изменения в последних версиях Java
Метод reverse() присутствует с Java 1.0. За последние версии (Java 8–21) сигнатура и поведение не менялись. Внутренние реализации могли быть оптимизированы (например, использование @HotSpotIntrinsicCandidate для ускорения), но это не влияет на контракт метода.
Расширенные примеры
Пример 1: разворот строки с проверкой на палиндром.
StringBuffer sb = new StringBuffer("А роза упала на лапу Азора");
StringBuffer rev = new StringBuffer(sb).reverse();
boolean isPalindrome = sb.toString().equalsIgnoreCase(rev.toString());
System.out.println(isPalindrome);true
Пример 2: многократный разворот (возврат к исходному состоянию).
StringBuffer sb = new StringBuffer("123");
sb.reverse();
System.out.println(sb); // 321
sb.reverse();
System.out.println(sb); // 123321 123
Пример 3: использование reverse() внутри синхронизированного блока для гарантии атомарности.
StringBuffer sb = new StringBuffer("thread");
synchronized (sb) {
sb.reverse();
// другие операции
}(нет вывода, но операция безопасна)
Пример 4: разворот буфера с последующей вставкой в середину.
StringBuffer sb = new StringBuffer("abcdef");
sb.reverse();
System.out.println(sb); // fedcba
sb.insert(3, "123");
System.out.println(sb); // fed123cbafedcba fed123cba
Пример 5: сравнение производительности StringBuffer.reverse() и ручного разворота через цикл для больших строк (иллюстрация, результат может отличаться).
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
- джава StringBuffer.reverse - аргументы и возвращаемое значение
- Функция java StringBuffer.reverse - описание
- StringBuffer.reverse - примеры
- StringBuffer.reverse - похожие методы на java
- StringBuffer.reverse на javascript, c#, python, php
- StringBuffer.reverse изменения java
- Примеры StringBuffer.reverse на джава