Überprüfen Sie, ob ein String in Java ein Palindrom ist

1. Einleitung

In diesem Artikel werden wir sehen, wie wir mit Java überprüfen können, ob ein bestimmter String ein Palindrom ist.

Ein Palindrom ist ein Wort, eine Phrase, eine Zahl oder eine andere Folge von Zeichen, die sowohl rückwärts als auch vorwärts gelesen werden , z. B. „Frau“ oder „Rennwagen“.

2. Lösungen

In den folgenden Abschnitten werden die verschiedenen Möglichkeiten zum Überprüfen, ob ein bestimmter String ein Palindrom ist oder nicht, untersucht.

2.1. Ein einfacher Ansatz

Wir können gleichzeitig damit beginnen, die angegebene Zeichenfolge zeichenweise vorwärts und rückwärts zu iterieren . Wenn eine Übereinstimmung vorliegt, wird die Schleife fortgesetzt. Andernfalls wird die Schleife beendet:

public boolean isPalindrome(String text) { String clean = text.replaceAll("\\s+", "").toLowerCase(); int length = clean.length(); int forward = 0; int backward = length - 1; while (backward > forward) { char forwardChar = clean.charAt(forward++); char backwardChar = clean.charAt(backward--); if (forwardChar != backwardChar) return false; } return true; }

2.2. String umkehren

Es gibt einige verschiedene Implementierungen, die zu diesem Anwendungsfall passen: Wir können die API-Methoden aus den Klassen StringBuilder und StringBuffer verwenden, um nach Palindromen zu suchen, oder wir können den String ohne diese Klassen umkehren .

Schauen wir uns zunächst die Code-Implementierungen ohne die Helfer-APIs an:

public boolean isPalindromeReverseTheString(String text) { StringBuilder reverse = new StringBuilder(); String clean = text.replaceAll("\\s+", "").toLowerCase(); char[] plain = clean.toCharArray(); for (int i = plain.length - 1; i >= 0; i--) { reverse.append(plain[i]); } return (reverse.toString()).equals(clean); }

In dem obigen Schnipsel wir einfach Iterierte des gegebene String aus dem letzten Zeichen und Anfügen jedes Zeichen zum nächsten Zeichen, die ganzen Weg bis zum ersten Zeichen dadurch die Umkehrung des gegebenen String.

Schließlich testen wir die Gleichheit zwischen dem angegebenen String und dem umgekehrten String.

Das gleiche Verhalten könnte mit API-Methoden erreicht werden.

Sehen wir uns eine kurze Demonstration an:

public boolean isPalindromeUsingStringBuilder(String text) { String clean = text.replaceAll("\\s+", "").toLowerCase(); StringBuilder plain = new StringBuilder(clean); StringBuilder reverse = plain.reverse(); return (reverse.toString()).equals(clean); } public boolean isPalindromeUsingStringBuffer(String text) { String clean = text.replaceAll("\\s+", "").toLowerCase(); StringBuffer plain = new StringBuffer(clean); StringBuffer reverse = plain.reverse(); return (reverse.toString()).equals(clean); }

Im Code-Snippet rufen wir die reverse () -Methode von der StringBuilder- und StringBuffer- API auf, um den angegebenen String umzukehren und auf Gleichheit zu testen.

2.3. Verwenden der Stream- API

Wir können auch einen IntStream verwenden , um eine Lösung bereitzustellen:

public boolean isPalindromeUsingIntStream(String text) { String temp = text.replaceAll("\\s+", "").toLowerCase(); return IntStream.range(0, temp.length() / 2) .noneMatch(i -> temp.charAt(i) != temp.charAt(temp.length() - i - 1)); }

In dieser kleinen Skript, überprüfen wir , dass keines der Paare von Zeichen von jedem Ende der Schnur des erfüllte Prädikat Zustand.

2.4. Rekursion verwenden

Rekursion ist eine sehr beliebte Methode, um diese Art von Problemen zu lösen. In dem gezeigten Beispiel iterieren wir den angegebenen String rekursiv und testen, um herauszufinden, ob es sich um ein Palindrom handelt oder nicht:

public boolean isPalindromeRecursive(String text){ String clean = text.replaceAll("\\s+", "").toLowerCase(); return recursivePalindrome(clean,0,clean.length()-1); } private boolean recursivePalindrome(String text, int forward, int backward) { if (forward == backward) { return true; } if ((text.charAt(forward)) != (text.charAt(backward))) { return false; } if (forward < backward + 1) { return recursivePalindrome(text, forward + 1, backward - 1); } return true; }

3. Fazit

In diesem kurzen Tutorial haben wir gesehen, wie Sie herausfinden können, ob ein bestimmter String ein Palindrom ist oder nicht.

Wie immer sind die Codebeispiele für diesen Artikel auf GitHub verfügbar.