Java Provjeri niz za mala / velika slova, posebni znak i znamenku

1. Pregled

U ovom brzom vodiču ilustrirat ćemo kako možemo provjeriti je li Niz sadrži barem jedno od sljedećeg: veliko slovo, malo slovo, znamenka ili poseban znak u Javi.

2. Korištenje regularnih izraza

Jedan od načina provođenja provjere je upotreba regularnih izraza. Da biste se upoznali s regularnim izrazima, pogledajte ovaj članak.

Prije svega, definirajmo regularni izraz za svaku od potrebnih skupina znakova. Budući da su regularni izrazi fiksni, nije ih potrebno vrednovati pri svakom izvođenju, pa ćemo ih sastaviti prije nego što ih usporedimo:

privatni statički završni obrazac [] inputRegexes = novi obrazac [4]; static {inputRegexes [0] = Pattern.compile (". * [A-Z]. *"); inputRegexes [1] = Pattern.compile (". * [a-z]. *"); inputRegexes [2] = Pattern.compile (". * \ d. *"); inputRegexes [3] = Pattern.compile (". * [` [email protected] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\ " , /?]. * ");}

Također, trebali bismo stvoriti jednostavnu metodu koju ćemo koristiti za testiranje je li naša Niz odgovara uvjetima:

privatni statički logički isMatchingRegex (unos niza) {boolean inputMatches = true; za (Uzorak inputRegex: inputRegexes) {if (! inputRegex.matcher (input) .matches ()) {inputMatches = false; }} vratiti inputMatches; }

2.1. Pojedinačni regularni izraz

Prethodni je primjer prilično čitljiv i omogućuje nam da po potrebi lako koristimo samo neke uzorke. Ali, u slučaju kada nam je stalo samo do ispunjavanja svih uvjeta, mnogo je učinkovitije koristiti jedan regularni izraz.

Na taj način ne bi nam trebao statički blok za inicijalizaciju i kompajliranje svih naših višestrukih izraza. Također, ne bi bilo potrebe za ponavljanjem svih njih i pronalaženjem koja se podudaranja podudaraju, a koja ne.

Sve što trebamo učiniti je prijaviti svoj regularni izraz:

Niz regularnog izraza = "^ (? =. *? \ p {Lu}) (? =. *? \ p {Ll}) (? =. *? \ d)" + "(? =. *? [`[e-pošta zaštićena] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\", /?]). * $ ";

A zatim ga kompajlirajte i usporedite:

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

Postoji nekoliko stvari koje bismo trebali istaknuti u vezi s našim redovitim izražavanjem.

Prvo smo koristili pozitivan pogled (? = X) za svaku skupinu znakova. To znači da očekujemo x koji se mogu naći nakon početka niza (označen s ^) kako bi se podudarali, ali ne želimo ići na kraj x, nego želimo ostati na početku retka.

Još jedna stvar koju treba primijetiti jest da ovaj put nismo koristili [A-Z] ili [a-z] za grupe slova, ali \ p {Lu} i \ p {Ll} umjesto toga. Oni će odgovarati bilo kojoj vrsti slova (u našem slučaju velikim i malim slovima) s bilo kojeg jezika, ne samo s engleskog.

3. Korištenje jezgre Java

Pogledajmo sada kako možemo izvršiti istu provjeru ako ne želimo koristiti regularne izraze. Iskoristit ćemo Lik i Niz klase i njihove metode za provjeru jesu li svi potrebni znakovi prisutni u našoj Niz:

privatni statički logički checkString (unos niza) {String specialChars = "~` [e-mail zaštićen] # $% ^ & * () -_ = + \ | [{]};: '\ ", /?"; char currentCharacter ; boolean numberPresent = false; boolean upperCasePresent = false; boolean lowerCasePresent = false; boolean specialCharacterPresent = false; for (int i = 0; i <input.length (); i ++) {currentCharacter = input.charAt (i); if ( Character.isDigit (currentCharacter)) {numberPresent = true;} else if (Character.isUpperCase (currentCharacter)) {upperCasePresent = true;} else if (Character.isLowerCase (currentCharacter)) {lowerCasePresent = true;} else if (specialChars. sadrži (String.valueOf (currentCharacter))) {specialCharacterPresent = true;}} return numberPresent && upperCasePresent && lowerCasePresent && specialCharacterPresent;}

Ovdje bismo trebali primijetiti nekoliko stvari. Osnovna ideja je da ponavljamo kroz naš Niz i provjerite jesu li njegovi znakovi potrebnih vrsta. Pomoću Lik razreda, lako možemo provjeriti je li određeni znak znamenka, veliko ili malo slovo.

Nažalost, ne postoji slična metoda koja bi nam rekla da imamo posla s nekim od posebnih znakova. Dakle, to znači da trebamo zauzeti drugi pristup.

Stvorili smo Niz koji sadrži sve posebne znakove koji su nam potrebni, a zatim provjerava sadrži li naš specifični znak.

4. Zaključak

U ovom kratkom članku pokazali smo kako provjeriti je li Niz sadrži potrebne znakove. U prvom smo scenariju koristili regularne izraze, dok smo u drugom iskoristili prednost osnovnih Java klasa.

Kao i obično, cjeloviti izvorni kod možete pronaći na GitHubu.