Controleer of een string een palindroom is in Java

1. Inleiding

In dit artikel gaan we kijken hoe we kunnen controleren of een gegeven is Draad is een palindroom dat Java gebruikt.

Een palindroom is een woord, zin, nummer of andere tekenreeksen die hetzelfde achterwaarts als voorwaarts lezen, zoals "mevrouw" of "raceauto".

2. Oplossingen

In de volgende secties zullen we de verschillende manieren bekijken om te controleren of een gegeven is Draad is een palindroom of niet.

2.1. Een eenvoudige aanpak

We kunnen tegelijkertijd beginnen met het herhalen van het gegeven draad vooruit en achteruit, één teken tegelijk. Als er een overeenkomst is, gaat de lus verder; anders wordt de lus afgesloten:

openbare boolean isPalindrome (String-tekst) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); int length = clean.length (); int vooruit = 0; int achteruit = lengte - 1; while (achteruit> vooruit) {char forwardChar = clean.charAt (vooruit ++); char backwardChar = clean.charAt (achteruit--); if (forwardChar! = backwardChar) geeft false terug; } retourneren waar; }

2.2. Het koord omkeren

Er zijn een paar verschillende implementaties die passen bij deze use case: we kunnen gebruik maken van de API-methoden van StringBuilder en StringBuffer klassen bij het controleren op palindromen, of we kunnen de Draad zonder deze klassen.

Laten we eerst eens kijken naar de code-implementaties zonder de helper-API's:

openbare boolean isPalindromeReverseTheString (String-tekst) {StringBuilder reverse = nieuwe 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 het bovenstaande fragment herhalen we eenvoudig het gegeven Draad vanaf het laatste teken en voeg elk teken toe aan het volgende teken, helemaal tot aan het eerste teken, waardoor het gegeven wordt omgekeerd Draad.

Ten slotte testen we op gelijkheid tussen de gegeven Draad en omgekeerd Draad.

Hetzelfde gedrag kan worden bereikt met API-methoden.

Laten we eens kijken naar een korte demonstratie:

openbare boolean isPalindromeUsingStringBuilder (String-tekst) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuilder plain = nieuwe StringBuilder (schoon); StringBuilder reverse = plain.reverse (); return (reverse.toString ()). equals (clean); } openbare boolean isPalindromeUsingStringBuffer (String-tekst) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuffer plain = nieuwe StringBuffer (schoon); StringBuffer reverse = plain.reverse (); return (reverse.toString ()). equals (clean); }

In het codefragment roepen we de omgekeerde() methode van de StringBuilder en StringBuffer API om het gegeven Draad en test op gelijkheid.

2.3. Gebruik makend van Stroom API

We kunnen ook een IntStream om een ‚Äč‚Äčoplossing te bieden:

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

In het bovenstaande fragment verifiëren we dat geen van de tekensparen aan elk uiteinde van het Draad voldoet aan de Predikaat staat.

2.4. Recursie gebruiken

Recursie is een zeer populaire methode om dit soort problemen op te lossen. In het getoonde voorbeeld herhalen we recursief het gegeven Draad en test om erachter te komen of het een palindroom is of niet:

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

3. Conclusie

In deze korte tutorial hebben we gezien hoe we erachter kunnen komen of een gegeven is Draad is een palindroom of niet.

Zoals altijd zijn de codevoorbeelden voor dit artikel beschikbaar op GitHub.