Merkkijonon tutkiminen matches-metodilla String-luokkaan on määritelty seuraava metodi: public boolean matches(string regular_expression)
Mihin käytetään String-luokan metodia public boolean matches(string regular_expression)? Voidaan vertailla onko merkkijono tietyn tyyppinen eli sisältääkö se tiettyjä merkkejä, onko merkkejä tarpeeksi jne. Vertailu palauttaa boolean arvon true tai false Merkkijono vertailuun voi tehdä monimutkaisiakin tarkistuksia: Onko käyttäjän antamassa sähköpostiosoitteen alussa kirjaimia ja/tai numeroita, @-merkki, lisää kirjaimia ja/tai numeroita, piste ja 2 tai 3 kirjainta? Sisältääkö käyttäjän antama puhelinnumero vain numeroita ja mahdollisesti numeroiden edessä voi olla +?
Vertailussa tietyt merkit: X merkki kirjoitetaan sellaisenaan \\ tarkoittaa yksi kenoviiva (\) Esim. String mjono = "kissa3"; if (mjono.matches("kissa3")) System.out.println(mjono); Vertailussa merkkijoukot: [abc] [^abc] [a-za-z] [a-d[m-p]] ] [a-z&&[def]] [a-z&&[^bc]] [a-z&&[^m-p]] merkit a, b tai c kaikki muut merkit paitsi a, b eikä c kaikki merkit välillä a-z tai A-Z kaikki merkit välillä a-d tai m-p merkkien a-z ja def leikkaus kaikki merkit välillä a-z paitsi b ja c kaikki merkit välillä a-z paitsi merkit välillä m-p
Esim. Käyttäjän antama merkkijonon pitää alkaa k:lla sitä pitää seurata jokin seuraavista kirjaimista a,b,c,d,e,f,g,h,i, jonka jälkeen pitää olla vielä merkkijono ssa, jota seuraa merkki 1, 2 tai 3: System.out.println("Anna sana:"); mjono = input.next(); input.nextline(); if (mjono.matches("k[a-i]ssa[1-3]")) System.out.println(mjono); else System.out.println(mjono + " ei noudata tyyppiä k[a-i]ssa[1-3]");
Vertailussa valmiit merkkijoukot:. Mikä tahansa merkki paitsi rivinvaihtomerkki \d numero: [0-9] \D Ei numero: [^0-9] \s Tyhjä merkki: [ \t\n\x0b\f\r] \S Ei tyhjämerkki: [^\s] \w Sanan merkki: [a-za-z_0-9] \W Ei sanan merkki: [^\w] Esim. Sisältääkö merkkijono vain numeron? String mluku = "6"; if (mluku.matches("\\d")) System.out.println(mluku + " YES"); else System.out.println(mluku + " NO");
Vertailussa merkkien lukumäärät mukana: X? Merkki voi esiintyvä kerran tai ei ollenkaan X* Merkki voi esiintyvä useasti tai ei ollenkaan X+ Merkki voi esiintyvä useasti tai vain kerran X{n} Merkin pitää esiintyä täsmälleen n kertaa X{n,} Merkin pitää esiintyä vähintään n kertaa X{n,m} Merkki voi esiintyvä vähintään n kertaa mutta enintään m kertaa Esim. käyttäjä antaa puhelinnumeron, se voi alkaa + merkillä, muut merkit tulee olla numeroita, numeron pituus pitää olla väliltä 7-15 System.out.println("Anna puhelinnumero:"); String puh = input.next(); if (puh.matches("[+]?\\d{7,15}")) System.out.println(puh + " YES"); else System.out.println(puh + " NO");
Harjoitus: Tee ohjelma joka pyytää henkilön email-osoitteen niin kauan kunnes käyttäjä antaa kunnollisen sähköpostiosoitteen. Käyttäjä voi antaa suuriakin kirjaimia, jotka ohjelma muuttaa pieniksi. Sähköpostiosoite voi sisältää sekä numeroita (0-9) ja kirjaimia (a-z) mutta ei välilyöntejä. Sähköpostiosoitteen muodostuu kahdesta osasta nimi ja domain, joiden välissä on @-merkki. Nimi voi noudattaa jompaakumpaa seuraavista muodoista: - etunimi.sukunimi -- etunimen/sukunimen minimipituus on 1 ja maksimipituus 20 - nimi - nimen minimi pituus on 1 ja maksimipituus on 20 Domainin täytyy noudattaa seuraavaa muotoa: yritys.maa yrityksen minimipituus on 2 maksimipituus on 20 ja maan minimipituus on 2 ja maksimipituus on 4