CodeGym /Blog Java /Random-PL /Odwróć ciąg znaków w Javie
Autor
John Selawsky
Senior Java Developer and Tutor at LearningTree

Odwróć ciąg znaków w Javie

Opublikowano w grupie Random-PL

Co to jest ciąg odwrotny?

„Zacznij czytać ciąg, zaczynając od jego ostatniego znaku aż do pierwszego znaku. Bingo! to był twój odwrócony ciąg”.
Oto demonstracja, jak to będzie wyglądać.

Input String = "X Y Z";
Output String = "Z Y X"

Input String = "1 2 3";
Output String = "3 2 1";

Input String = "I love Java!";
Output String = "!avaJ evol I";

Jak odwrócić ciąg znaków w Javie?

Istnieją różne sposoby odwrócenia ciągu znaków w Javie. Jednak Java nie udostępnia żadnej metody reverse() dla klasy String . Naiwne podejście zaczyna się od użycia pętli for . Tradycyjna procedura iteracyjna. Później możemy go zbudować, używając metod reverse() oferowanych przez inne klasy, takie jak StringBuilder i StringBuffer .

Metoda 1 - Iteracyjny sposób starej szkoły


public class StringReversal {

	public static String reverseInputString(String myString) {

		if (myString == null)
			return myString;

		String reverseString = "";

		for (int i = myString.length() - 1; i >= 0; i--) {		

			reverseString = reverseString + myString.charAt(i);
		}
		return reverseString;
	}

	public static void main(String[] args) {

		String myString1 = "X Y Z";
		System.out.println("reverse(" + myString1 + ") = " + reverseInputString(myString1));

		String myString2 = "1 2 3";
		System.out.println("reverse(" + myString2 + ") = " + reverseInputString(myString2));

		String myString3 = "I LOVE JAVA!";
		System.out.println("reverse(" + myString3 + ") = " + reverseInputString(myString3));

		String myString4 = "My favourite place to learn Java is CodeGym.";
		System.out.println("reverse(" + myString4 + ") = " + reverseInputString(myString4));

		String myString5 = "My name is Lubaina Khan.";
		System.out.println("reverse(" + myString5 + ") = " + reverseInputString(myString5));
		
		// Boundary Case to see what happens if a String is null
		String myString6 = null;
		System.out.println("reverse(" + myString6 + ") = " + reverseInputString(myString6));
		
		// Boundary Case to see what happens if a String is empty
		String myString7 = "";
		System.out.println("reverse(" + myString7 + ") = " + reverseInputString(myString7));
	}
}

Wyjście

reverse(XYZ) = ZYX reverse(1 2 3) = 3 2 1 reverse(I LOVE JAVA!) = !AVAJ EVOL I reverse(Moim ulubionym miejscem do nauki Javy jest CodeGym.) = .myGedoC si avaJ nrael ot ecalp etiruovaf yM reverse(Nazywam się Lubaina Khan.) = .nahK aniabuL si eman yM reverse(null) = null reverse() =

Wyjaśnienie


public static String reverseInputString(String myString) { ... }
Metoda reverseInputString pobiera ciąg wejściowy o nazwie myString .

if (myString == null)
	return myString;
Sprawdź, czy wejściowy ciąg, tj . myString, ma wartość null. Jeśli znaleziono wartość null, zwróć dane wejściowe bez zmian. Nie musimy iść dalej. Nazywa się to obsługą przypadków granicznych, aby uniknąć błędów.

String reverseString = "";
Zadeklaruj pusty ciąg do przechowywania danych wyjściowych.

for (int i = myString.length() - 1; i >= 0; i--) {		
	reverseString = reverseString + myString.charAt(i);
}
Użyj normalnej pętli for . Zainicjuj iterator i od ostatniego indeksu wejściowego String . Uzyskaj dostęp do ostatniego indeksu ciągu wejściowego i zapisz go w ciągu wyjściowym. Powtarzaj, aż dojdziesz do indeksu 0 lub początku ciągu wejściowego.

return reverseString;
Zwróć reverseString i użyj go zgodnie ze swoimi wymaganiami.

Metoda 2 — użycie klasy konstruktora ciągów

W Javie zawartość ciągu znaków po zainicjowaniu nie może zostać zmieniona. W związku z tym nie ma dostępnej metody reverse() dla String s. Ale inne klasy, takie jak StringBuilder i StringBuffer w Javie, zawierają zawartość, która jest mutowalna lub zmienna. Aby odwrócić ciąg znaków bez pętli i użyć wbudowanej klasy StringBuilder lub StringBuffer , spójrzmy na poniższy przykład.

public class StringBuilderReversal {

	public static void main(String[] args) {

		String input1 = "A B C";
		StringBuilder inputText1 = new StringBuilder(input1);
		System.out.println("reverse(" + inputText1 + ") = " + inputText1.reverse());

		String input2 = "0 1 2 2 3 3 3";
		StringBuilder inputText2 = new StringBuilder(input2);
		System.out.println("reverse(" + inputText2 + ") = " + inputText2.reverse());

		String input3 = "Monday";
		StringBuilder inputText3 = new StringBuilder(input3);
		System.out.println("reverse(" + inputText3 + ") = " + inputText3.reverse());

		String input4 = "I love CodeGym!";
		StringBuilder inputText4 = new StringBuilder(input4);
		System.out.println("reverse(" + inputText4 + ") = " + inputText4.reverse());

		 // ReverseString using the StringBuilder class
		StringBuilder inputText5 = new StringBuilder("Reverse this String using StringBuilder Class.");
		System.out.println("reverse(" + inputText5 + ") = " + inputText5.reverse());

		 // ReverseString using the StringBuffer class
		StringBuffer inputText6 = new StringBuffer("Reverse this String using StringBuffer Class.");
		System.out.println("reverse(" + inputText6 + ") = " + inputText6.reverse());
	}
}

Wyjście

reverse(ABC) = CBA reverse(0 1 2 2 3 3 3) = 3 3 3 2 2 1 0 reverse(poniedziałek) = yadnoM reverse(I love CodeGym!) = !myGedoC evol I reverse(Reverse this String using StringBuilder Class .) = .ssalC redliuBgnirtS gnisu gnirtS siht esreveR reverse(Odwróć ten łańcuch przy użyciu klasy StringBuffer.) = .ssalC reffuBgnirtS gnisu gnirtS siht esreveR

Wyjaśnienie


String input1 = "A B C";
StringBuilder inputText1 = new StringBuilder(input1);
Aby odwrócić ciąg wejściowy , musisz przekonwertować go na StringBuilder . W tym celu przekaż ciąg wejściowy do konstruktora StringBuilder .

System.out.println("reverse(" + inputText1 + ") = " + inputText1.reverse());
Po przekonwertowaniu String na StringBuilder możesz uzyskać jego odwrotność i wydrukować dane wyjściowe.

 // ReverseString using the StringBuffer class
StringBuffer inputText6 = new StringBuffer("Reverse this String using StringBuffer Class.");
Alternatywnie możesz przekazać String bezpośrednio do StringBuilder lub StringBuffer .

Wniosek

Do końca tego wpisu musisz być zaznajomiony z odwróceniem Strings i jak to osiągnąć za pomocą innych klas StringBuilder i StringBuffer. Możesz wybrać dowolną metodę według własnego uznania. Nie krępuj się wskoczyć, gdy poczujesz, że utknąłeś. Do tego czasu ćwicz i nie przestawaj błyszczeć.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION