Kuvioiden kääntäminen
Pattern.compile ja Matcher.
Kuvioiden kääntäminen on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.
Patternin ja Matcherin pari
Javan säännölliset lausekkeet sijaitsevat paketissa java.util.regex. Pattern on käännetty säännöllinen lauseke, ja Matcher käyttää tätä kaavaa tiettyyn syötteeseen.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("abc123");
System.out.println(m.find());
}
}Käännä kerran, käytä uudelleen usein
Pattern.compile on suhteellisen kallis operaatio. Kääntäkää säännöllinen lauseke kerran ja käyttäkää sitä uudelleen useiden syötteiden kanssa sen sijaan, että kääntäisitte sen uudelleen silmukassa.
import java.util.regex.Pattern;
public class Main {
static final Pattern DIGITS = Pattern.compile("\\d+");
public static void main(String[] args) {
System.out.println(DIGITS.matcher("a1").find());
System.out.println(DIGITS.matcher("bb").find());
}
}Kenoviivojen suojaaminen Javassa
Regex-tunnisteet, kuten \d, tarvitsevat kenoviivan, mutta Java-merkkijonot käyttävät kenoviivaa myös escapetuksissa. Lähdekoodissa kirjoitetaan siis \\d, joka tarkoittaa regexiä \d.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern word = Pattern.compile("\\w+");
System.out.println(word.matcher("hello").matches());
}
}Matcherin luominen
pattern.matcher(input) liittää kuvion syötemerkkijonoon ja palauttaa uuden Matcher-olion, joka seuraa sijaintia.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("the cat sat");
System.out.println(m.find());
}
}Matcher-oliot ovat tilallisia
Matcher sisältää muuttuvaa tilaa (nykyinen sijainti ja viimeisin osuma). Luokaa kullekin syötteelle uusi matcher-olio älkääkä jakako samaa oliota säikeiden kesken.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d");
Matcher m = p.matcher("a1b2");
System.out.println(m.find());
System.out.println(m.find());
}
}Kirjainkoon ohittava lippu
Välittäkää liput compile-metodin toisena argumenttina. Pattern.CASE_INSENSITIVE ohittaa kirjainkoon.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
System.out.println(p.matcher("I love JAVA").find());
}
}Lippujen yhdistäminen
Yhdistäkää liput bittikohtaisella TAI-operaattorilla. Tässä lisätään MULTILINE, jotta ankkurit vastaavat jokaisen rivin kohdalla.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("^a", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher m = p.matcher("apple\nApricot");
int count = 0;
while (m.find()) count++;
System.out.println(count);
}
}Staattinen matches-oikotie
Pattern.matches(regex, input) on kertakäyttöinen apumetodi, joka kääntää kuvion ja testaa sen yhdellä kutsulla. Se on kätevä, mutta kääntää kuvion uudelleen joka kerta.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
System.out.println(Pattern.matches("\\d{3}", "123"));
System.out.println(Pattern.matches("\\d{3}", "12"));
}
}Jakaminen Pattern-oliolla
Käännetyllä Pattern-oliolla voi jakaa merkkijonoja split-metodilla ja käyttää samaa käännettyä regexiä tehokkaasti uudelleen.
import java.util.Arrays;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern comma = Pattern.compile("\\s*,\\s*");
String[] parts = comma.split("a, b ,c, d");
System.out.println(Arrays.toString(parts));
}
}Kuvion tarkasteleminen
pattern() palauttaa alkuperäisen regex-merkkijonon ja flags() palauttaa käytössä olevat liput kokonaislukuna.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE);
System.out.println(p.pattern());
System.out.println(p.flags());
}
}Virheelliset kuviot aiheuttavat poikkeuksen
Virheellinen regex aiheuttaa PatternSyntaxException-poikkeuksen compile-kutsun aikana, joten virheet voidaan havaita aikaisessa vaiheessa.
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class Main {
public static void main(String[] args) {
try {
Pattern.compile("[unclosed");
} catch (PatternSyntaxException e) {
System.out.println("Invalid regex");
}
}
}Pikatarkistus
Miksi usein käytetty regex kannattaa kääntää staattiseksi Pattern-kentäksi?
Kertaus
Käänsitte kuvioita:
Pattern.compileluo uudelleenkäytettävän, muuttumattoman ja säieturvallisen kuvion;matcherliittää sen syötteeseen.- Regexin kenoviivat suojataan Java-lähdekoodissa muodossa
\\. - Liput, kuten
CASE_INSENSITIVEjaMULTILINE, yhdistetään bittikohtaisella TAI-operaattorilla. Matcheron tilallinen, joten kullekin syötteelle luodaan oma olio.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 104
- Oppitunnit
- 374
Usein kysytyt kysymykset
Onko oppitunti ”Kuvioiden kääntäminen” ilmainen?
Kyllä – oppitunnin ”Kuvioiden kääntäminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Kuvioiden kääntäminen”?
Pattern.compile ja Matcher. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Kuvioiden kääntäminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?
Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Kuvioiden kääntäminen
- Etsiminen ja sovittaminen
- Sieppausryhmät
- Korvaaminen säännöllisillä lausekkeilla