Provjerite je li String Palindrom u Javi

1. Uvod

U ovom ćemo članku vidjeti kako možemo provjeriti je li dano Niz je palindrom koji koristi Javu.

Palindrom je riječ, fraza, broj ili drugi slijed znakova koji se čita unatrag kao i naprijed, kao što su "madam" ili "racecar".

2. Rješenja

U sljedećim odjeljcima razmotrit ćemo razne načine provjere je li zadani Niz je li palindrom ili nije.

2.1. Jednostavan pristup

Istovremeno možemo započeti ponavljanje zadanog niz naprijed i natrag, po jedan znak. Ako postoji podudaranje, petlja se nastavlja; u suprotnom, petlja izlazi:

javni boolean isPalindrome (tekst niza) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); int dužina = clean.length (); int naprijed = 0; int unatrag = duljina - 1; while (natrag> naprijed) {char forwardChar = clean.charAt (naprijed ++); char backwardChar = clean.charAt (backward--); if (forwardChar! = backwardChar) return false; } return true; }

2.2. Obrtanje niza

Postoji nekoliko različitih implementacija koje odgovaraju ovom slučaju upotrebe: možemo se koristiti API metodama iz StringBuilder i StringBuffer klase prilikom provjere palindroma ili možemo preokrenuti Niz bez ovih razreda.

Pogledajmo prvo implementacije koda bez pomoćnih API-ja:

javna logička vrijednost jePalindromeReverseTheString (tekst niza) {StringBuilder reverse = new StringBuilder (); Niz čist = text.replaceAll ("\ s +", "") .toLowerCase (); char [] plain = clean.toCharArray (); for (int i = plain.length - 1; i> = 0; i--) {reverse.append (plain [i]); } return (reverse.toString ()). jednako (čisto); }

U gornjem isječku jednostavno ponavljamo dano Niz od posljednjeg znaka i dodajte svaki znak sljedećem znaku, sve do prvog znaka, čime se zadani preokreće Niz.

Napokon, ispitujemo jednakost između danog Niz i obrnuto Niz.

Isto ponašanje moglo bi se postići uporabom API metoda.

Pogledajmo brzu demonstraciju:

javni boolean isPalindromeUsingStringBuilder (Tekst niza) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuilder plain = novi StringBuilder (čist); StringBuilder reverse = plain.reverse (); return (reverse.toString ()). jednako (čisto); } public boolean isPalindromeUsingStringBuffer (Tekst niza) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuffer plain = novi StringBuffer (čist); StringBuffer reverse = plain.reverse (); return (reverse.toString ()). jednako (čisto); }

U isječku koda pozivamo obrnuti () metoda iz StringBuilder i StringBuffer API za preokret datog Niz i test za jednakost.

2.3. Koristeći Stream API

Također možemo koristiti IntStream pružiti rješenje:

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

U gornjem isječku potvrđujemo da nijedan od parova znakova sa svakog kraja znaka Niz ispunjava Predikat stanje.

2.4. Korištenje rekurzije

Rekurzija je vrlo popularna metoda za rješavanje takvih problema. U prikazanom primjeru rekurzivno ponavljamo zadani Niz i testirajte kako biste utvrdili je li palindrom ili nije:

javni boolean isPalindromeRecursive (tekst niza) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); return rekurzivniPalindrom (clean, 0, clean.length () - 1); } private boolean rekurzivniPalindrom (Tekst niza, int naprijed, int natrag) {if (naprijed == natrag) {return true; } if ((text.charAt (forward))! = (text.charAt (backward))) {return false; } if (naprijed <unatrag + 1) {return rekurzivniPalindrom (tekst, naprijed + 1, natrag - 1); } return true; }

3. Zaključak

U ovom smo brzom uputstvu vidjeli kako saznati je li dano Niz je li palindrom ili nije.

Kao i uvijek, primjeri koda za ovaj članak dostupni su na GitHubu.