Java Skontrolujte reťazec pre malé / veľké písmená, špeciálne znaky a číslice

1. Prehľad

V tomto rýchlom návode si ukážeme, ako môžeme skontrolujte, či a String obsahuje najmenej jedno z nasledujúcich znakov: veľké písmeno, malé písmeno, číslicu alebo špeciálny znak v Jave.

2. Používanie regulárnych výrazov

Jedným zo spôsobov kontroly je použitie regulárnych výrazov. Ak sa chcete oboznámiť s regulárnymi výrazmi, prečítajte si tento článok.

Najskôr definujeme regulárny výraz pre každú z požadovaných skupín znakov. Pretože sú regulárne výrazy zafixované, nie je potrebné ich hodnotiť pri každom spustení, preto ich pred porovnaním zostavíme:

súkromný statický konečný vzor [] inputRegexes = nový vzor [4]; static {inputRegexes [0] = Pattern.compile (". * [A-Z]. *"); inputRegexes [1] = Pattern.compile (". * [a-z]. *"); inputRegexes [2] = Pattern.compile (". * \ d. *"); inputRegexes [3] = Pattern.compile (". * [` [chránený e-mailom] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\ " , /?]. * ");}

Mali by sme tiež vytvoriť jednoduchú metódu, pomocou ktorej otestujeme, či je naša String spĺňa podmienky:

private static boolean isMatchingRegex (String input) {boolean inputMatches = true; pre (vzor inputRegex: inputRegexes) {if (! inputRegex.matcher (input) .matches ()) {inputMatches = false; }} vratit inputMatches; }

2.1. Jeden regulárny výraz

Predchádzajúci príklad je pekne čitateľný a umožňuje nám v prípade potreby ľahko použiť iba niektoré zo vzorov. Ale v prípade, že nám záleží iba na splnení všetkých podmienok, je oveľa efektívnejšie použiť jediný regulárny výraz.

Takto by sme nepotrebovali statický blok na inicializáciu a kompiláciu všetkých našich viacerých výrazov. Tiež by nebolo treba iterovať všetky a zistiť, ktoré zhody a ktoré nie.

Všetko, čo musíme urobiť, je deklarovať náš regulárny výraz:

Reťazec regex = "^ (? =. *? \ p {Lu}) (? =. *? \ p {Ll}) (? =. *? \ d)" + "(? =. *? [`[chránené e-mailom] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\", /?]). * $ ";

A potom to skompilovať a porovnať:

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

Existuje niekoľko vecí, ktoré by sme mali upozorniť na náš regulárny výraz.

Najprv sme použili pozitívny lookahead (? = X) pre každú skupinu znakov. To znamená, že očakávame X nájdete po začiatku reťazca (označené symbolom ^) aby sme sa zhodovali, ale nechceme ísť na koniec X, skôr chceme zostať na začiatku riadku.

Ďalšia vec, ktorú si musíme všimnúť, je, že sme tento čas nevyužili [A-Z] alebo [a-z] pre skupiny písmen, ale \ p {Lu} a \ p {Ll} namiesto toho. Budú sa zhodovať s akýmkoľvek písmom (v našom prípade malými a veľkými písmenami) z ľubovoľného jazyka, nielen z angličtiny.

3. Používanie Core Java

Pozrime sa teraz, ako môžeme vykonať rovnakú kontrolu, ak nechceme používať regulárne výrazy. Využijeme to Postava a String triedy a ich metódy na kontrolu, či sa v našej aplikácii nachádzajú všetky požadované znaky String:

private static boolean checkString (reťazcový vstup) {reťazec specialChars = "~` [chránený e-mailom] # $% ^ & * () -_ = + \ | [{]};: '\ ", /?"; 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. contains (String.valueOf (currentCharacter))) {specialCharacterPresent = true;}} návratové čísloPresent && upperCasePresent && lowerCasePresent && specialCharacterPresent;}

Mali by sme si tu všimnúť niekoľko vecí. Základnou myšlienkou je, že iterujeme prostredníctvom našich String a skontrolujte, či sú jeho znaky požadovaného typu. Používaním Postava triedy, môžeme ľahko skontrolovať, či je určitým znakom číslica, veľké alebo malé písmeno.

Bohužiaľ neexistuje žiadna podobná metóda, ktorá by nám povedala, či máme do činenia s jednou zo špeciálnych postáv. Znamená to, že musíme zvoliť iný prístup.

Vytvorili sme String obsahuje všetky špeciálne znaky, ktoré potrebujeme, a potom skontrolovalo, či obsahuje náš konkrétny znak.

4. Záver

V tomto rýchlom článku sme si ukázali, ako skontrolovať, či a String obsahuje povinné znaky. V prvom scenári sme použili regulárne výrazy, zatiaľ čo v druhom sme využili výhody základných tried Java.

Kompletný zdrojový kód nájdete ako obvykle na GitHub.