Kontroller, om en streng er et pangram i Java

1. Oversigt

I denne vejledning lærer vi at kontrollere, om en given streng er gyldig pangram eller ikke bruger et simpelt Java-program. EN pangram er en hvilken som helst streng, der indeholder alle bogstaverne i et givet alfabet mindst én gang.

2. Pangrammer

Pangrams gælder ikke kun engelsk, men også ethvert andet sprog, der har et fast tegnsæt.

For eksempel er et almindeligt kendt engelsk pangram “En hurtig brun ræv springer over den dovne hund”. Tilsvarende er disse også tilgængelige på andre sprog.

3. Brug af en til Sløjfe

Lad os først prøve en til løkke. Vi udfylder en Boolsk matrix med markører for hvert tegn i alfabetet.

Koden vender tilbage rigtigt når alle værdierne i markørarrayet er indstillet til rigtigt:

offentlig statisk boolsk isPangram (String str) {if (str == null) {return false; } Boolsk [] alphabetMarker = ny boolsk [ALPHABET_COUNT]; Arrays.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] = sand; }} for (boolsk indeks: alphabetMarker) {if (! index) {return false; }} returner sandt; }

Lad os teste vores implementering:

@ Test offentligt ugyldigt givenValidString_isPanagram_shouldReturnSuccess () {String input = "To drevne jocks hjælper med at faxe min store quiz"; assertTrue (Pangram.isPangram (input)); }

4. Brug af Java Streams

En alternativ tilgang indebærer brug af Java Streams API. Vi kan Opret en filtreret tegnstrøm ud af den givne inputtekst og opret et alfabet Kort ved hjælp af strømmen.

Koden returnerer succes, hvis størrelsen på Kort er lig med alfabetets størrelse. For engelsk er den forventede størrelse 26:

offentlig statisk boolsk isPangramWithStreams (String str) {if (str == null) {return false; } Streng strUpper = str.toUpperCase (); Stream filteredCharStream = strUpper.chars () .filter (item -> ((item> = 'A' && item (char) c); Map alphabetMap = filteredCharStream.collect (Collectors.toMap (item -> item, k -> Boolean) .TRUE, (p1, p2) -> p1)); returner alphabetMap.size () == ALPHABET_COUNT;}

Og lad os selvfølgelig teste:

@Test offentlig ugyldighed givenValidString_isPangramWithStreams_shouldReturnSuccess () {String input = "Den hurtige brune ræv springer over den dovne hund"; assertTrue (Pangram.isPangramWithStreams (input)); }

5. Modificering for perfekte pangrammer

En perfekt pangram er lidt anderledes end en almindelig pangram. EN perfekt pangram består af hvert bogstav i alfabetet nøjagtigt en gang i modsætning til mindst en gang for et pangram.

Koden vender tilbage rigtigt når begge Kort størrelse er lig med alfabetets størrelse, og hyppigheden af ​​hvert tegn i alfabetet er nøjagtigt en:

offentlig statisk boolsk isPerfectPangram (String str) {if (str == null) {return false; } Streng strUpper = str.toUpperCase (); Stream filteredCharStream = strUpper.chars () .filter (item -> ((item> = 'A' && item (char) c); Map alphabetFrequencyMap = filteredCharStream.collect (Collectors.groupingBy (Function.identity (), Collectors.counting) ())); returner alphabetFrequencyMap.size () == ALPHABET_COUNT && alphabetFrequencyMap.values ​​(). stream (). allMatch (item -> item == 1);}

Og lad os teste:

@Test offentlig ugyldighed givenPerfectPangramString_isPerfectPangram_shouldReturnSuccess () {String input = "abcdefghijklmNoPqrStuVwxyz"; assertTrue (Pangram.isPerfectPangram (input)); }

En perfekt pangram skal have hver karakter nøjagtigt en gang. Så vores tidligere pangram skulle mislykkes:

String input = "To drevne jocks hjælper med at faxe min store quiz"; assertFalse (Pangram.isPerfectPangram (input));

I ovenstående kode har den givne strenginput flere duplikater, ligesom den har to o'er. Derfor er output falsk.

5. Konklusion

I denne artikel har vi dækket forskellige løsningsmetoder for at finde ud af, om en given streng er et gyldigt pangram eller ej.

Vi diskuterede også en anden smag af pangram, der kaldes perfekt pangram, og hvordan man identificerer det programmatisk.

Kodeprøven er tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found