Рубрики
Без рубрики

Переверните строку в Java

Обратный перевод строки в Java, обратный метод Java StringBuffer, обратный метод Java StringBuilder, функция обратного перевода строки в java, как изменить строку в java слово за словом, как изменить строку в java без использования обратной функции, обратный перевод строки в java.

Автор оригинала: Pankaj Kumar.

Обратная строка в java – это хороший вопрос для интервью, связанный с кодированием. Я видел, как интервьюируемый пытался многими способами изменить строку, используя разные способы. Идея этого поста состоит в том, чтобы предоставить некоторые из популярных способов реверсирования строки и, наконец, определить, какой из них является лучшим и правильным способом реверсирования строки.

Переверните строку в Java

  1. Обратная строка с помощью StringBuilder или StringBuffer

    Мы знаем, что StringBuffer и StringBuilder классы предоставляют обратный метод, поэтому мы можем использовать его для обратного преобразования строки. Ниже приведен фрагмент кода, показывающий, как использовать StringBuilder для изменения строки.

  2. Обратная строка с использованием массива символов

    Мы можем преобразовать Строку в массив символов , а затем пересечь его в обратном направлении и заполнить из него второй массив символов. Затем используйте второй массив символов для создания строки, которая будет заменена первой. Ниже приведен код для этого подхода.

  3. Обратная строка с использованием массива байтов

    Тот же подход, что и с массивом символов, но с использованием массива байтов. Код показан ниже.

Обратная строка Слово за словом

Иногда мы хотим, чтобы слова менялись местами в предложении, а не символ за символом. Ниже приведен простой код, показывающий, как это сделать с помощью функции разделения строк и StringBuilder.

String inputLine = "God is Good";
String[] words = inputLine.split(" ");
StringBuilder sb = new StringBuilder();
for (int i = words.length-1; i >= 0; i--) {
    sb.append(words[i]).append(' ');
} 
//trim to remove last white space
System.out.println("Reverse words = '" + sb.toString().trim()+"'");

Лучший способ изменить строку в Java?

Итак, сверху три подхода, который является правильным и лучшим. Как вы можете видеть выше, все три подхода прекрасно работают для простого ввода данных. Если вы читаете класс строк javadoc, в нем есть несколько интересных моментов.

Класс String предоставляет методы для работы с кодовыми точками Юникода (т. е. символами), в дополнение к методам для работы с кодовыми единицами Юникода (т. Е. значениями символов).

Таким образом, похоже, что для некоторых символов Юникода он будет занимать две позиции индекса в массиве символов или массиве байтов. Окажет ли это какое-либо влияние на код, который мы видели выше, чтобы изменить строку. Давайте выясним это, написав простой класс, в котором мы будем принимать пользовательский ввод с помощью класса сканера и отменять его, используя все три вышеперечисленных метода.

package com.journaldev.string;

import java.util.Scanner;

public class JavaReverseString {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.println("Enter Input String:");
		String input = sc.nextLine();
		System.out.println("Enter Input Sentence:");
		String inputLine = sc.nextLine();
		sc.close();

		reverseUsingStringBuilder(input);
		reverseUsingByteArray(input);
		reverseUsingCharArray(input);
		reverseWords(inputLine);
	}

	private static void reverseUsingByteArray(String input) {
		byte[] ba = input.getBytes();
		byte[] result = new byte[ba.length];
		int len = ba.length;
		for (byte b : ba) {
			result[len - 1] = b;
			len--;
		}
		System.out.println("Reversed String using Byte Array = " + new String(result));
	}

	private static void reverseUsingCharArray(String input) {
		char[] ca = input.toCharArray();
		char[] result = new char[ca.length];
		int len = ca.length;
		for (char c : ca) {
			result[len - 1] = c;
			len--;
		}
		System.out.println("Reversed String using Char Array = " + new String(result));
	}

	private static void reverseUsingStringBuilder(String input) {
		// use StringBuffer for Java < 1.5
		StringBuilder sb = new StringBuilder(input);
		System.out.println("Reversed String using StringBuilder = " + sb.reverse());
	}

	private static void reverseWords(String inputLine) {
		String[] words = inputLine.split(" ");
		StringBuilder sb = new StringBuilder();
		for (int i = words.length - 1; i >= 0; i--) {
			sb.append(words[i]).append(' ');
		}
		// trim to remove last white space
		System.out.println("Reverse words = '" + sb.toString().trim() + "'");

	}

}

Ниже приведен пример выходных данных для одного из тестовых запусков.

Enter Input String:
JournalDev
Enter Input Sentence:
JournalDev is Good
Reversed String using StringBuilder = veDlanruoJ
Reversed String using Byte Array = veDlanruoJ
Reversed String using Char Array = veDlanruoJ
Reverse words = 'Good is JournalDev'

Таким образом, кажется, что все методы отлично работают для обычной строки на основе английских символов. Теперь на рисунке ниже показан другой запуск, в котором символы юникода присутствуют во входной строке.

Таким образом, в приведенном выше сценарии реверс массива байтов не работал должным образом. Однако подход StringBuilder и массива символов работал нормально. Я не пробовал использовать дополнительные символы в качестве входной строки для вышеуказанной программы, но если я посмотрю на javadoc для API обратной функции StringBuilder , там будет написано:

Таким образом, кажется, что дополнительные символы обрабатываются в методе обратного() StringBuilder. Вот почему, если есть какая-либо необходимость изменить строку, я рекомендую использовать метод StringBuilder reverse ().