Ellenőrizze, hogy a karakterlánc Pangram-e a Java-ban

1. Áttekintés

Ebben az oktatóanyagban megtanuljuk ellenőrizni, hogy egy adott karakterlánc érvényes-e, vagy sem egy egyszerű Java program használatával. A a pangram minden olyan karaktersorozat, amely egy adott ábécé összes betűjét tartalmazza legalább egyszer.

2. Pangramok

A pandramok nemcsak az angol nyelvre alkalmazhatók, hanem bármely más nyelvre is, amelynek rögzített karakterkészlete van.

Például egy általánosan ismert angol pangram: „Egy gyors barna róka átugrik a lusta kutyán”. Hasonlóképpen ezek elérhetőek más nyelveken is.

3. Használja a mert Hurok

Először próbáljuk ki a mert hurok. Feltöltjük a Logikai tömb jelölők az ábécé minden karakteréhez.

A kód visszatér igaz amikor a marker tömb összes értéke a igaz:

public static boolean isPangram (String str) {if (str == null) {return false; } Logikai [] alphabetMarker = új logikai [ALPHABET_COUNT]; Tömbök.kitöltés (alphabetMarker, hamis); int ábécéIndex = 0; str = str.UpperCase (); for (int i = 0; i <str.length (); i ++) {if ('A' <= str.charAt (i) && str.charAt (i) <= 'Z') {ábécéIndex = str.charAt i) - „A”; alphabetMarker [alphabetIndex] = igaz; }} for (logikai index: alphabetMarker) {if (! index) {return false; }} return true; }

Teszteljük a megvalósítást:

@Test public void givenValidString_isPanagram_shouldReturnSuccess () {String input = "Két hajtott jock segít faxolni a nagy kvízemet"; assertTrue (Pangram.isPangram (bemenet)); }

4. Java adatfolyamok használata

Alternatív megközelítés magában foglalja a Java Streams API használatát. Tudunk hozzon létre egy szűrt karakterfolyamot az adott beviteli szövegből, és hozzon létre egy ábécét Térkép a patak felhasználásával.

A kód akkor adja vissza a sikert, ha a Térkép az ábécé méretével egyenlő. Angol nyelv esetén a várható méret 26:

public static boolean isPangramWithStreams (String str) {if (str == null) {return false; } String strUpper = str.toUpperCase (); Stream filteredCharStream = strUpper.chars (). Filter . IGAZ, (p1, p2) -> p1)); return alphabetMap.size () == ALPHABET_COUNT;}

És természetesen teszteljük:

@Test public void givenValidString_isPangramWithStreams_shouldReturnSuccess () {String input = "A gyors barna róka átugrik a lusta kutyán"; assertTrue (Pangram.isPangramWithStreams (input)); }

5. Tökéletes Pangramok módosítása

A tökéletes pangram kicsit más, mint a szokásos pangram. A a tökéletes pangram az ábécé minden betűjéből áll pontosan egyszer szemben legalább egyszer egy pangrammal.

A kód visszatér igaz amikor mind a Térkép méret megegyezik az ábécé méretével, és az ábécé minden egyes karakterének gyakorisága pontosan egy:

public static boolean isPerfectPangram (String str) {if (str == null) {return false; } String strUpper = str.toUpperCase (); Stream filteredCharStream = strUpper.chars (). Filter ())); return alphabetFrequencyMap.size () == ALPHABET_COUNT && alphabetFrequencyMap.values ​​(). stream (). allMatch (item -> item == 1);}

És teszteljük:

@Test public void givenPerfectPangramString_isPerfectPangram_shouldReturnSuccess () {String input = "abcdefghijklmNoPqrStuVwxyz"; assertTrue (Pangram.isPerfectPangram (bemenet)); }

Egy tökéletes pangramnak minden szereplőnek pontosan egyszer kell lennie. Tehát az előző pangramunk kudarcot vall:

String input = "Két hajtott jock segít faxolni a nagy vetélkedőt"; assertFalse (Pangram.isPerfectPangram (input));

A fenti kódban az adott karakterlánc-bemenetnek több másolata van, akárcsak két o-ja. Ezért a kimenet az hamis.

5. Következtetés

Ebben a cikkben különféle megoldási megközelítéseket tártunk fel annak kiderítésére, hogy egy adott karakterlánc érvényes pangram-e vagy sem.

Megbeszéltük a pangramok egy másik ízét is, amelyet tökéletes pangramnak hívnak, és hogyan lehet azt programosan azonosítani.

A kódminta elérhető a GitHubon.