Java Academy · Pelajaran

Menyusun Corak

Pattern.compile dan Matcher

Pelajaran 1 daripada 413 langkah

Menyusun Corak ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Pasangan Corak dan Pemadan

Ungkapan biasa Java berada dalam java.util.regex. Corak ialah ungkapan biasa yang telah dikompil; pemadan menggunakan corak itu pada masukan tertentu.

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());
    }
}

Kompil Sekali, Guna Semula Kerap

Pattern.compile agak mahal dari segi kos. Kompilasikan corak sekali dan gunakannya semula untuk banyak masukan, bukannya mengkompil semula dalam gelung.

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());
    }
}

Meloloskan Garis Condong Terbalik dalam Java

Token ungkapan nalar seperti \d memerlukan garis condong terbalik, tetapi rentetan Java juga menggunakan garis condong terbalik untuk pelolosan. Jadi, dalam kod sumber anda menulis \\d untuk mewakili ungkapan nalar \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());
    }
}

Mencipta Pemadan

pattern.matcher(input) mengikat corak pada rentetan masukan dan mengembalikan Matcher baharu yang menjejak kedudukan.

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());
    }
}

Pemadan Menyimpan Keadaan

Matcher menyimpan keadaan boleh ubah (kedudukan semasa, padanan terakhir). Cipta pemadan baharu untuk setiap masukan; jangan kongsikan satu pemadan antara utas.

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());
    }
}

Penanda Tidak Peka Huruf Besar Kecil

Hantar penanda sebagai hujah kedua kepada compile. Pattern.CASE_INSENSITIVE mengabaikan perbezaan huruf besar dan kecil.

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());
    }
}

Menggabungkan Penanda

Gabungkan penanda dengan operator OR bit demi bit. Di sini kita menambah MULTILINE supaya penambat sepadan pada setiap baris.

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);
    }
}

Pintasan matches Statik

Pattern.matches(regex, input) ialah pembantu sekali panggil yang mengkompil dan menguji dalam satu panggilan. Mudah digunakan, tetapi ia mengkompil semula setiap kali.

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"));
    }
}

Memisahkan dengan Corak

Pattern yang telah dikompil boleh memisahkan rentetan melalui split, dengan menggunakan semula ungkapan nalar yang sama secara cekap.

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));
    }
}

Memeriksa Corak

pattern() mengembalikan rentetan ungkapan nalar asal dan flags() mengembalikan penanda aktif sebagai int.

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());
    }
}

Corak Tidak Sah Menjana Ralat

Ungkapan nalar yang tidak sah menghasilkan PatternSyntaxException pada masa compile, supaya anda dapat mengendalikan ralat lebih awal.

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");
        }
    }
}

Semakan Pantas

Mengapakah anda patut mengkompil ungkapan nalar yang kerap digunakan ke dalam medan Pattern statik?

Ulang Kaji

Anda telah mengkompil corak:

  • Pattern.compile membina corak yang boleh digunakan semula, tidak boleh berubah dan selamat untuk utas; matcher mengikatnya pada masukan.
  • Loloskan garis condong terbalik ungkapan nalar sebagai \\ dalam kod sumber Java.
  • Penanda seperti CASE_INSENSITIVE dan MULTILINE digabungkan dengan OR bit demi bit.
  • Matcher menyimpan keadaan, jadi cipta satu untuk setiap masukan.
Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
104
Pelajaran
374

Soalan Lazim

Adakah pelajaran “Menyusun Corak” percuma?

Ya — teks penuh “Menyusun Corak” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Menyusun Corak”?

Pattern.compile dan Matcher Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Java Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Menyusun Corak” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menyusun Corak
  2. Mencari dan Memadankan
  3. Kumpulan Tangkapan
  4. Penggantian dengan Regex
← Kembali ke Java Academy