Sjekk om en streng er et pangram i Java

1. Oversikt

I denne opplæringen lærer vi å sjekke om en gitt streng er gyldig pangram eller ikke bruker et enkelt Java-program. EN pangram er en hvilken som helst streng som inneholder alle bokstavene i et gitt alfabet sett minst en gang.

2. Pangrammer

Pangrammer gjelder ikke bare engelsk, men også andre språk som har et fast tegnsett.

For eksempel er et kjent engelsk pangram “En rask brunrev hopper over den dovne hunden”. På samme måte er disse også tilgjengelige på andre språk.

3. Bruke en til Løkke

La oss først prøve a til Løkke. Vi fyller en Boolsk rekke med markører for hvert tegn i alfabetet.

Koden kommer tilbake ekte når alle verdiene i markørmatrisen er satt til ekte:

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] = sann; }} for (boolsk indeks: alphabetMarker) {if (! index) {return false; }} returner sant; }

La oss teste implementeringen vår:

@Test public void givenValidString_isPanagram_shouldReturnSuccess () {String input = "Two driven jocks help fax my big quiz"; assertTrue (Pangram.isPangram (input)); }

4. Bruke Java Streams

En alternativ tilnærming innebærer bruk av Java Streams API. Vi kan lage en filtrert tegnstrøm ut av den gitte inndatateksten og opprette et alfabet Kart bruker strømmen.

Koden gir suksess hvis størrelsen på Kart er lik alfabetets størrelse. For engelsk er forventet 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) .SANN, (p1, p2) -> p1)); returner alphabetMap.size () == ALPHABET_COUNT;}

Og selvfølgelig, la oss teste:

@Test public void givenValidString_isPangramWithStreams_shouldReturnSuccess () {String input = "Den raske brunrevenen hopper over den late hunden"; assertTrue (Pangram.isPangramWithStreams (input)); }

5. Modifisering for perfekte pangrammer

En perfekt pangram er litt annerledes enn en vanlig pangram. EN perfekt pangram består av hver bokstav i alfabetet nøyaktig en gang i motsetning til minst en gang for et pangram.

Koden kommer tilbake ekte når begge Kart størrelse tilsvarer alfabetets størrelse og hyppigheten av hvert tegn i alfabetet er nøyaktig 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 la oss teste:

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

Et perfekt pangram skal ha hver karakter nøyaktig en gang. Så vårt forrige pangram skulle mislykkes:

String input = "Two driven jocks help fax my big quiz"; assertFalse (Pangram.isPerfectPangram (input));

I den ovennevnte koden har den angitte strenginngangen flere duplikater, som om den har to o-er. Derfor er produksjonen falsk.

5. Konklusjon

I denne artikkelen har vi dekket ulike løsningsmetoder for å finne ut om en gitt streng er et gyldig pangram eller ikke.

Vi diskuterte også en annen smak av pangram som kalles perfekt pangram og hvordan man identifiserer det programmatisk.

Kodeeksemplet er tilgjengelig på GitHub.


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