Как перевернуть строку в java
Перейти к содержимому

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

  • автор:

Перевернуть строку с помощью stack в Java

В этом посте будет обсуждаться, как перевернуть строку с помощью stack в Java.

В следующем примере показано, как инвертировать строку с помощью Структура данных stack в Java. Ниже приведены полные шаги:

  1. Создайте пустой stack символов.
  2. Преобразуйте данную строку в массив символов, используя String.toCharArray() метода и поместите каждый его символ в stack.
  3. Удаляйте символы из stack, пока он не станет пустым, и возвращайте их обратно в массив символов. Поскольку стек следует порядку FILO, символы будут вставляться в обратном порядке.
  4. Наконец, преобразуйте массив символов в строку, используя String.copyValueOf(char[]) и вернуть сформированную строку.

Следующая программа демонстрирует это:

Перевернуть все слова строки

Необходимо перевернуть каждое слово в вводимой пользователем строке, например Привет Мир ⇒ тевирП риМ . Я попытался написать метод для этого, но он лишь переворачивает первое слово. Как я могу это исправить?

public class MyString < public static String ReverseString(String string) < char[] array = string.toCharArray(); int i = 0, j = array.length - 1; while (i < j) < char t = array[i]; array[i] = array[j]; array[j] = t; i++; j--; >return String.valueOf(array); > > 

Отслеживать
user420361
задан 12 дек 2020 в 17:53
Даниил Кравцов Даниил Кравцов
3 2 2 бронзовых знака

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Разворачиваем слова в строке:

String str = "Привет Мир"; String reverse = Arrays.stream(str.split("\\s+")) // для каждого слова в строке // получаем массив символов .map(String::toCharArray) // разворачиваем массив символов .peek(arr -> IntStream.range(0, arr.length / 2).forEach(i -> < char temp = arr[i]; arr[i] = arr[arr.length - 1 - i]; arr[arr.length - 1 - i] = temp; >)) // собираем слово из массива символов .map(String::valueOf) // собираем троку из слов .collect(Collectors.joining(" ")); System.out.println(reverse); // тевирП риМ 

Отслеживать
ответ дан 12 дек 2020 в 20:26
user420361 user420361

Вот рабочий код:

String str3 = "java"; String[] words = new StringBuilder(str3).reverse().toString().split(" "); StringBuilder newStr = new StringBuilder(); for (int i = words.length - 1; i >= 0; i--) newStr.append(words[i]).append(""); System.out.println(newStr); 

Отслеживать
ответ дан 12 дек 2020 в 18:12
Николай Гнап Николай Гнап
399 4 4 серебряных знака 15 15 бронзовых знаков

  • java
  • строки
  • сортировка
  • замена
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Перевернуть строку в Java 10 различными способами

В этом посте мы обсудим, как перевернуть строку в Java 10 различными способами. Например, обратная сторона “Techie Delight” — это “thgileD eihceT”.

Мы рассмотрели 10 различных способов (и 15 различных реализаций) обращения строки в Java:

  1. Использование StringBuilder/StringBuffer
  2. Использование stack
  3. Использование платформы коллекций Java reverse() метод
  4. Использование массива символов
  5. Использование массива символов и swap()
  6. Использование оператора + (конкатенация строк)
  7. Использование символа Unicode для замены справа налево (RLO)
  8. Использование байтового массива
  9. Использование рекурсии
  10. С использованием substring() метод

1. Использование StringBuilder / StringBuffer

Мы можем использовать StringBuilder.reverse() метод для эффективного реверсирования строки Java. В качестве альтернативы мы также можем использовать StringBuffer.reverse() метод. С использованием StringBuilder предлагается, так как он не синхронизирован и быстрее, чем StringBuffer .

class Main
// Метод реверсирования строки в Java с использованием `StringBuilder`
public static String reverse ( String str ) < return new StringBuilder ( str ) . reverse ( ) . toString ( ) ; public static void main ( String [ ] args ) String str = "Techie Delight" ; // Обратите внимание, что строка неизменяема в Java str = reverse ( str ) ; System . out . println ( "The reverse of the given string is: " + str ) ;

результат:

The reverse of the given string is: thgileD eihceT

2. Использование Stack

Мы можем воспользоваться помощью Структура данных stack чтобы перевернуть строку в Java. Ниже приведены полные шаги:

  1. Создайте пустой stack символов.
  2. Преобразуйте данную строку в массив символов, используя String.toCharArray() метода и поместите каждый его символ в stack.
  3. Удаляйте символы из stack, пока он не станет пустым, и возвращайте их обратно в массив символов. Поскольку стек следует порядку FILO, символы будут вставляться в обратном порядке.
  4. Наконец, преобразуйте массив символов в строку, используя String.copyValueOf(char[]) и вернуть сформированную строку.

Следующая программа демонстрирует это:

import java . util . Stack ;
class Main
// Метод обращения строки в Java с использованием stack и массива символов
public static String reverse ( String str )
// базовый случай: если строка нулевая или пустая
if ( str == null || str . equals ( «» ) ) < return str ; // создаем пустой stack символов Stack stack = new Stack ( ) ;
// помещаем каждый символ заданной строки в stack
char [ ] ch = str . toCharArray ( ) ;
for ( int i = 0 ; i < str . length ( ) ; i ++ ) < stack . push ( ch [ i ] ) ; // начинаем с индекса 0 // извлекать символы из stack, пока он не станет пустым while ( ! stack . isEmpty ( ) ) // назначаем каждый извлеченный символ обратно в массив символов ch [ k ++ ] = stack . pop ( ) ; // преобразовать массив символов в строку и вернуть его return String . copyValueOf ( ch ) ; public static void main ( String [ ] args ) String str = "Techie Delight" ; str = reverse ( str ) ; // строка неизменяема System . out . println ( "The reverse of the given string is: " + str ) ;

результат:

The reverse of the given string is: thgileD eihceT

Мы также можем использовать StringBuilder вместо массива символов, как показано ниже:

import java . util . Stack ;
class Main
// Метод реверсирования строки в Java с использованием класса `Stack` и `StringBuilder`
public static String reverse ( String str )
// базовый случай: если строка нулевая или пустая
if ( str == null || str . equals ( «» ) ) < return str ; // создаем пустой stack символов Stack stack = new Stack ( ) ;
// помещаем каждый символ заданной строки в stack
for ( int i = 0 ; i < str . length ( ) ; i ++ ) < stack . push ( str . charAt ( i ) ) ; // извлекаем символы из stack и добавляем их в `StringBuilder` StringBuilder sb = new StringBuilder ( ) ; while ( ! stack . isEmpty ( ) ) < sb . append ( stack . pop ( ) ) ; // преобразовать `StringBuilder` в `String` и вернуть return sb . toString ( ) ; public static void main ( String [ ] args ) String str = "Techie Delight" ; str = reverse ( str ) ; // Строка неизменна System . out . println ( "The reverse of the given string is: " + str ) ;

результат:

The reverse of the given string is: thgileD eihceT

3. Использование платформы коллекций Java reverse() метод

Мы можем использовать Collections.reverse() чтобы перевернуть строку в Java. Ниже приведены полные шаги:

  1. Создать пустой ArrayList символов и инициализируйте его символами данной строки, используя String.toCharArray() .
  2. Переверните список, используя java.util.Collections reverse() метод.
  3. Наконец, преобразовать ArrayList в строку с помощью StringBuilder и вернуть его.

Следующая программа демонстрирует это:

import java . util . List ;
import java . util . ArrayList ;
import java . util . Collections ;
import java . util . ListIterator ;
class Main
// Метод реверсирования строки в Java с использованием `Collections.reverse()`
public static String reverse ( String str )
// базовый случай: если строка нулевая или пустая
if ( str == null || str . equals ( «» ) ) < return str ; // создаем пустой список символов List list = new ArrayList ( ) ;
// помещаем туда каждый символ заданной строки
for ( char c : str . toCharArray ( ) ) < list . add ( c ) ; // обратный список с использованием `java.util.Collections` `reverse()` Collections . reverse ( list ) ; // преобразовать `ArrayList` в строку с помощью `StringBuilder` и вернуть ее StringBuilder builder = new StringBuilder ( list . size ( ) ) ; for ( Character c : list ) < builder . append ( c ) ; return builder . toString ( ) ; public static void main ( String [ ] args ) String str = "Techie Delight" ; // Строка неизменна str = reverse ( str ) ; System . out . println ( "The reverse of the given string is: " + str ) ;

результат:

The reverse of the given string is: thgileD eihceT

Приведенное выше решение сначала преобразует ArrayList в StringBuilder , тогда StringBuilder в строку. Мы можем напрямую преобразовать ArrayList в строку, удалив из нее квадратные скобки, запятые и один пробел. Следующий код использует String.replaceAll() чтобы добиться этого. Но такой подход крайне неэффективен, и его следует избегать любой ценой.

import java . util . List ;
import java . util . ArrayList ;
import java . util . Collections ;
class Main
// Метод реверсирования строки в Java с использованием `Collections.reverse()`
public static String reverse ( String str )
// возвращаем, если строка нулевая или пустая
if ( str == null || str . equals ( «» ) ) < return str ; // создаем пустой список символов и проталкиваем каждый // символ заданной строки в него List list = new ArrayList ( ) ;
for ( char c : str . toCharArray ( ) ) < list . add ( c ) ; // обратный список с использованием `java.util.Collections` `reverse()` Collections . reverse ( list ) ; // `list.toString()` равно [t, h, g, i, l, e, D, , e, i, h, c, e, T] // преобразовать `list.toString()` в допустимую строку return list . toString ( ) . replaceAll ( "[,\\[\\]]" , "" ) // t h g i l e D e i h c e T . replaceAll ( " " , "@" ) // thgile D@eihce T . replaceAll ( " " , "" ) // thgileD@eihceT . replaceAll ( "@" , " " ) ; // thgileD eihceT public static void main ( String [ ] args ) String str = "Techie Delight" ; // Строка неизменна str = reverse ( str ) ; System . out . println ( "The reverse of the given string is: " + str ) ;

результат:

The reverse of the given string is: thgileD eihceT

4. Использование массива символов

Мы знаем, что не можем внести какие-либо изменения в объект String, поскольку строка неизменяема в Java. Но мы можем использовать массив символов, который можно легко изменить:

  1. Создайте пустой массив символов того же размера, что и у данной строки.
  2. Заполните массив символов в обратном порядке символами данной строки.
  3. Наконец, преобразуйте массив символов в строку, используя String.copyValueOf(char[]) и вернуть его.

Следующая программа демонстрирует это:

class Main
// Метод обращения строки в Java с использованием массива символов
public static String reverse ( String str )
// возвращаем, если строка нулевая или пустая
if ( str == null || str . equals ( «» ) ) < return str ; // получаем длину строки int n = str . length ( ) ; // создаем массив символов того же размера, что и строка char [ ] temp = new char [ n ] ; // заполняем массив символов в обратном порядке символами строки for ( int i = 0 ; i < n ; i ++ ) < temp [ n - i - 1 ] = str . charAt ( i ) ; // преобразовать массив символов в строку и вернуть ее return String . copyValueOf ( temp ) ; public static void main ( String [ ] args ) String str = "Techie Delight" ; // Строка неизменна str = reverse ( str ) ; System . out . println ( "The reverse of the given string is: " + str ) ;

результат:

The reverse of the given string is: thgileD eihceT

5. Использование массива символов и swap() метод

Ниже приведен еще один эффективный способ перевернуть строку в Java с помощью массива символов:

  1. Создайте массив символов и инициализируйте его символами данной строки, используя String.toCharArray() .
  2. Начните с двух конечных точек l а также h заданной строки. Запустите цикл, пока две конечные точки не пересекутся. (l
  3. Наконец, преобразуйте массив символов в строку, используя String.copyValueOf(char[]) и вернуться.

Следующая программа демонстрирует это:

class Main
// Метод обращения строки в Java с использованием массива символов
public static String reverse ( String str )
// возвращаем, если строка нулевая или пустая
if ( str == null || str . equals ( «» ) ) < return str ; // создаем массив символов и инициализируем его заданной строкой char [ ] c = str . toCharArray ( ) ; for ( int l = 0 , h = str . length ( ) - 1 ; l < h ; l ++ , h -- ) // поменять местами значения в `l` и `h` char temp = c [ l ] ; c [ l ] = c [ h ] ; c [ h ] = temp ; // преобразовать массив символов в строку и вернуться return String . copyValueOf ( c ) ; public static void main ( String [ ] args ) String str = "Techie Delight" ; // Строка неизменна str = reverse ( str ) ; System . out . println ( "The reverse of the given string is: " + str ) ;

результат:

The reverse of the given string is: thgileD eihceT

6. Использование + (конкатенация строк) оператор

Мы можем использовать оператор конкатенации строк + чтобы перевернуть строку в Java, читая символы с ее конца и объединяя их в начале новой строки. Обратите внимание, что для повышения производительности повторной конкатенации строк компилятор Java может использовать StringBuffer класс или аналогичный метод для уменьшения общего количества промежуточных строковых объектов, созданных путем вычисления выражения. [1] .

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

Чтобы перевернуть строку в Java, можно воспользоваться готовым решением — методом reverse() из библиотеки Apache Commons Lang. Для начала её нужно установить. Добавьте в файл build.gradle d секцию dependencies такой код:

implementation 'org.apache.commons:commons-lang3:3.12.0' 

После установки можно начать применять эту библиотеку

import org.apache.commons.lang3.StringUtils; StringUtils.reverse("hello"); // "olleh" 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *