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.