Java Kontroller en streng for små / store bogstaver, specialtegn og ciffer

1. Oversigt

I denne hurtige vejledning illustrerer vi, hvordan vi kan kontrollere, om en Snor indeholder mindst et af følgende: store bogstaver, små bogstaver, ciffer eller specialtegn i Java.

2. Brug af regulære udtryk

En af måderne til at udføre vores kontrol er ved at bruge regulære udtryk. For at blive fortrolig med regulære udtryk, skal du tjekke denne artikel.

Lad os først og fremmest definere det regulære udtryk for hver af de krævede tegngrupper. Da regulære udtryk er faste, er det ikke nødvendigt at evaluere dem ved hver kørsel, så vi kompilerer dem, før vi sammenligner med dem:

privat statisk slutmønster [] inputRegexes = nyt mønster [4]; statisk {inputRegexes [0] = Pattern.compile (". * [A-Z]. *"); inputRegexes [1] = Mønsterkompilering (". * [a-z]. *"); inputRegexes [2] = Mønsterkompilering (". * \ d. *"); inputRegexes [3] = Mønsterkompilering (". * [` [e-mailbeskyttet] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\ " , /?]. * ");}

Vi skal også oprette en enkel metode, som vi skal bruge til at teste, om vores Snor matcher betingelserne:

privat statisk boolsk isMatchingRegex (strengindgang) {boolsk inputMatches = sand; for (Mønster inputRegex: inputRegexes) {hvis (! inputRegex.matcher (input) .matches ()) {inputMatches = false; }} returner inputMatches; }

2.1. Enkelt regulært udtryk

Det foregående eksempel er ret læsbart og giver os mulighed for kun at bruge nogle af mønstrene, hvis det er nødvendigt. Men i et tilfælde, hvor vi kun interesserer os for at opfylde alle betingelserne, er det meget mere effektivt at bruge et enkelt regulært udtryk.

På den måde behøver vi ikke en statisk blok for at initialisere og kompilere alle vores flere udtryk. Der vil heller ikke være behov for at gentage dem alle og finde hvilke matches og hvilke der ikke gør det.

Alt hvad vi skal gøre er at erklære vores regex:

Streng regex = "^ (? =. *? \ p {Lu}) (? =. *? \ p {Ll}) (? =. *? \ d)" + "(? =. *? [`[email protected] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\", /?]). * $ ";

Og kompilér og sammenlign det derefter:

@Test offentlig ugyldighed givenSingleRegex_whenMatchingCorrectString_thenMatches () {String validInput = "Ab3;"; assertTrue (Pattern.compile (regex) .matcher (validInput) .matches ()); }

Der er et par ting, vi skal påpege vedrørende vores regelmæssige udtryk.

For det første har vi brugt positivt lookahead (? = X) for hver gruppe tegn. Det betyder, at vi forventer x findes efter begyndelsen af ​​strengen (markeret med ^) for at matche, men vi ønsker ikke at gå til slutningen af xsnarere ønsker vi at blive ved begyndelsen af ​​linjen.

En anden ting at bemærke er, at vi ikke brugte denne gang [A-Z] eller [a-z] til brevgrupper, men \ p {Lu} og \ p {Ll} i stedet. Disse vil matche enhver form for bogstaver (i vores tilfælde henholdsvis store og små bogstaver) fra ethvert sprog, ikke kun engelsk.

3. Brug af Core Java

Lad os nu se, hvordan vi kan udføre den samme kontrol, hvis vi ikke vil bruge regulære udtryk. Vi drager fordel af Karakter og Snor klasser og deres metoder til at kontrollere, om alle nødvendige tegn er til stede i vores Snor:

privat statisk boolsk checkString (String input) {String specialChars = "~` [email protected] # $% ^ & * () -_ = + \ | [{]};: '\ ", /?"; char currentCharacter ; boolsk numberPresent = false; boolsk upperCasePresent = false; boolsk lowerCasePresent = false; boolsk specialCharacterPresent = false; for (int i = 0; i <input.length (); i ++) {currentCharacter = input.charAt (i); hvis ( Character.isDigit (currentCharacter)) {numberPresent = true;} ellers hvis (Character.isUpperCase (currentCharacter)) {upperCasePresent = true;} ellers hvis (Character.isLowerCase (currentCharacter)) {lowerCasePresent = true;} ellers hvis (specialChars. indeholder (String.valueOf (currentCharacter))) {specialCharacterPresent = true;}} return numberPresent && upperCasePresent && lowerCasePresent && specialCharacterPresent;}

Vi skal bemærke et par ting her. Grundtanken er, at vi gentager gennem vores Snor og kontroller, om dens tegn er af krævede typer. Ved hjælp af Karakter klasse, kan vi nemt kontrollere, om et bestemt tegn er et ciffer, et stort eller et lille tegn.

Desværre er der ingen lignende metode, der fortæller os, om vi har at gøre med et af specialtegnene. Så det betyder, at vi er nødt til at tage en anden tilgang.

Vi har oprettet en Snor indeholder alle specialtegn, vi har brug for, og kontrolleres derefter, om den indeholder vores specifikke karakter.

4. Konklusion

I denne hurtige artikel har vi vist, hvordan man kontrollerer, om en Snor indeholder krævede tegn. I det første scenarie brugte vi regulære udtryk, mens vi i det andet udnyttede Java-klasser.

Som sædvanlig kan komplet kildekode findes på GitHub.