Provjerite je li niz Pangram na Javi
1. Pregled
U ovom uputstvu naučit ćemo provjeriti je li zadani niz valjan pangram ili ne, koristeći jednostavni Java program. A pangram je bilo koji niz koji barem jednom sadrži sva slova dane abecede.
2. Pangrami
Pangrami su primjenjivi ne samo na engleski jezik, već i na bilo koji drugi jezik koji ima fiksni skup znakova.
Na primjer, poznati engleski pangram je "Brza smeđa lisica preskoči lijenog psa". Slično tome, dostupni su i na drugim jezicima.
3. Korištenje a za Petlja
Prvo, probajmo a za petlja. Naselit ćemo a Booleova niz sa oznake za svaki znak abecede.
Kôd se vraća pravi kada su sve vrijednosti u polju markera postavljene na pravi:
javni statički logički isPangram (String str) {if (str == null) {return false; } Boolean [] alphabetMarker = novi logički podatak [ALPHABET_COUNT]; Nizovi.fill (alphabetMarker, false); int alphabetIndex = 0; str = str.toUpperCase (); for (int i = 0; i <str.length (); i ++) {if ('A' <= str.charAt (i) && str.charAt (i) <= 'Z') {alphabetIndex = str.charAt (i) - "A"; alphabetMarker [alphabetIndex] = true; }} za (logički indeks: alphabetMarker) {if (! indeks) {return false; }} return true; }
Isprobajmo našu implementaciju:
@Test javna praznina givenValidString_isPanagram_shouldReturnSuccess () {String input = "Dva pogođena jocka pomažu mi da faksiram moj veliki kviz"; assertTrue (Pangram.isPangram (ulaz)); }
4. Korištenje Java Streamova
Alternativni pristup uključuje upotrebu Java Streams API-ja. Možemo stvorite filtrirani tok znakova iz zadanog ulaznog teksta i stvorite abecedu Karta koristeći potok.
Kôd vraća uspjeh ako je veličina datoteke Karta jednaka je veličini abecede. Očekivana veličina za engleski jezik je 26:
javna statička logička vrijednost isPangramWithStreams (String str) {if (str == null) {return false; } Niz strUpper = str.toUpperCase (); Struja filteredCharStream = strUpper.chars () .filter (item -> ((item> = 'A' && item (char) c); Map alphabetMap = filteredCharStream.collect (Collectors.toMap (item -> item, k -> Boolean) .TRUE, (p1, p2) -> p1)); return alphabetMap.size () == ALPHABET_COUNT;}
I, naravno, testirajmo:
@Test javna praznina givenValidString_isPangramWithStreams_shouldReturnSuccess () {String input = "Brza smeđa lisica preskače lijenog psa"; assertTrue (Pangram.isPangramWithStreams (ulaz)); }
5. Modificiranje za savršene pangrame
Savršeni pangram malo se razlikuje od običnog pangrama. A savršeni pangram sastoji se od svakog slova abecede točno jednom za razliku od barem jednom za pangram.
Kôd se vraća pravi kad oboje Karta veličina jednaka je veličini abecede, a učestalost svakog znaka u abecedi je točno jedna:
javni statički logički isPerfectPangram (niz str) {if (str == null) {return false; } Niz strUpper = str.toUpperCase (); Potok filteredCharStream = strUpper.chars () .filter (item -> ((item> = 'A' && item (char) c); Map alphabetFrequencyMap = filteredCharStream.collect (Collectors.groupingBy (Function.identity (), Collectors.counting ())); return alphabetFrequencyMap.size () == ALPHABET_COUNT && alphabetFrequencyMap.values (). stream (). allMatch (item -> item == 1);}
I testirajmo:
@Test javna praznina givenPerfectPangramString_isPerfectPangram_shouldReturnSuccess () {String input = "abcdefghijklmNoPqrStuVwxyz"; assertTrue (Pangram.isPerfectPangram (ulaz)); }
Savršeni pangram trebao bi imati svaki lik točno jednom. Dakle, naš prethodni pangram ne bi uspio:
String input = "Dva pogođena jocka pomažu mi da faksiram moj veliki kviz"; assertFalse (Pangram.isPerfectPangram (ulaz));
U gornjem kodu, zadani ulazni niz ima nekoliko duplikata, kao da ima dva o. Stoga je izlaz lažno.
5. Zaključak
U ovom smo članku pokrili različite pristupe rješenjima kako bismo saznali je li dati niz važeći pangram ili ne.
Također smo razgovarali o još jednom okusu pangrama koji se naziva savršeni pangram i kako ga programski prepoznati.
Uzorak koda dostupan je na GitHubu.