JavaRush /Blog Jawa /Random-JV /Ungkapan Biasa ing Basa Jawa, Part 3

Ungkapan Biasa ing Basa Jawa, Part 3

Diterbitake ing grup
We presentake kanggo manungsa waé terjemahan saka pandhuan singkat kanggo ekspresi reguler ing Jawa, ditulis dening Jeff Friesen kanggo situs web javaworld . Kanggo gampang maca, kita wis dibagi artikel dadi sawetara bagean. Ungkapan Biasa ing Basa Jawa, Part 3 - 1Ungkapan Reguler ing Basa Jawa, Bagian 1 Ungkapan Reguler Basa Jawa, Perangan 2

Nyederhanakake tugas pemrograman umum nganggo Regex API

Ing Bagean 1 lan 2 artikel iki, sampeyan dikenalake karo ekspresi reguler lan Regex API. Sampeyan sinau babagan kelas Patternlan ngliwati conto sing nduduhake konstruksi ekspresi reguler, saka pencocokan pola sing prasaja nggunakake string literal nganti pencocokan sing luwih rumit nggunakake rentang, pencocokan wates, lan pengukur. Ing bagean iki lan sakteruse, kita bakal nimbang masalah sing ora dibahas ing bagean pisanan, kita bakal sinau cara kelas sing cocog Pattern, Matcherlan PatternSyntaxException. Sampeyan uga bakal sinau rong utilitas sing nggunakake ekspresi reguler kanggo nggawe masalah pemrograman umum luwih gampang. Sing pertama ngekstrak komentar saka kode kanggo dokumentasi. Kapindho yaiku perpustakaan kode sing bisa digunakake maneh sing dirancang kanggo nindakake analisis leksikal - komponen penting saka assemblers, compiler, lan piranti lunak sing padha.

NGUNDUH KODE SUMBER

Sampeyan bisa njaluk kabeh kode sumber (digawe dening Jeff Friesen kanggo JavaWorld) kanggo aplikasi demo ing artikel iki saka kene .

Sinau API Regex

Pattern, Matcherlan PatternSyntaxExceptiontelung kelas sing nggawe Regex API. Saben-saben menehi cara sing ngidini sampeyan nggunakake ekspresi reguler ing kode sampeyan.

Metode saka kelas Pola

Instance saka kelas Patternminangka ekspresi reguler sing dikompilasi, uga dikenal minangka pola. Ekspresi reguler dikompilasi kanggo nambah kinerja operasi pencocokan pola. Cara statis ing ngisor iki ndhukung kompilasi.
  • Pattern compile(String regex)nglumpukake isi regexmenyang perwakilan penengah sing disimpen ing anyar Pattern. Cara iki ngasilake referensi menyang obyek yen sukses, utawa mbuwang pengecualian PatternSyntaxExceptionyen sintaks ekspresi reguler ora bener dideteksi. Sembarang obyek saka kelas Matchersing digunakake Patternutawa bali saka obyek iki nggunakake setelan gawan, kayata telusuran cilik-sensitif. Contone, snippet kode Pattern p = Pattern.compile("(?m)^\\."); nggawe obyek Patternsing nyimpen perwakilan kompilasi ekspresi reguler kanggo cocog strings sing diwiwiti karo karakter titik.

  • Pattern compile(String regex, int flags)solves masalah padha Pattern compile(String regex), nanging njupuk menyang akun flags: pesawat saka konstanta bit kanggo gendero bit saka jinis UTAWA. Kelas kasebut Patternnyatakake konstanta CANON_EQ, CASE_INSENSITIVE, COMMENTS, DOTALL, LITERAL, MULTILINE, UNICODE_CASE, UNICODE_CHARACTER_CLASS и UNIX_LINESsing bisa digabung nggunakake bitwise UTAWA (contone, CASE_INSENSITIVE | DOTALL) lan diterusake minangka argumen flags.

  • Kajaba saka CANON_EQ, LITERAL и UNICODE_CHARACTER_CLASS, konstanta iki minangka alternatif kanggo ekspresi gendera nested sing dituduhake ing Part 1. Yen pancet gendera liyane tinimbang sing ditetepake ing kelas ditemoni Pattern, metode kasebut Pattern compile(String regex, int flags) nggawe pengecualian java.lang.IllegalArgumentException. Contone, Pattern p = Pattern.compile("^\\.", Pattern.MULTILINE);padha karo conto sadurunge, karo pancet Pattern.MULTILINElan expression flag nested (?m)nindakake bab sing padha.
Kadhangkala perlu diwenehi salinan senar asli saka ekspresi reguler sing disusun dadi obyek Pattern, bebarengan karo gendera sing digunakake. Kanggo nindakake iki, sampeyan bisa nelpon cara ing ngisor iki:
  • String pattern()ngasilake string ekspresi reguler asli sing disusun dadi Pattern.

  • int flags()ngasilake gendera obyek Pattern.
Sawise nampa obyek kasebut Pattern, biasane digunakake kanggo njupuk obyek Matcherkanggo nindakake operasi pencocokan pola. Cara Matcher matcher(Charsequence input)nggawe obyek Matchersing nggoleki teks inputsing cocog karo pola obyek Pattern. Nalika disebut, iku ngasilake referensi kanggo obyek iki Matcher. Contone, printah Matcher m = p.matcher(args[1]);bali Matcherkanggo obyek Patternsing dirujuk dening variabel p.
Panelusuran siji-wektu
Cara static boolean matches(String regex, CharSequence input)kelas Patternngidini sampeyan ngirit nggawe obyek Patternlan Matchertelusuran siji-wektu nggunakake cithakan. Cara iki ngasilake bener yen inputpola dicocogake regex, yen ora bakal ngasilake palsu. Yen ekspresi reguler ngemot kesalahan sintaks, metode kasebut bakal menehi pengecualian PatternSyntaxException. Contone, System.out.println(Pattern.matches("[a-z[\\s]]*", "all lowercase letters and whitespace only"));prints true, konfirmasi yen tembung all lowercase letters and whitespace onlymung ngemot spasi lan aksara cilik.
Ungkapan Biasa ing Basa Jawa, Part 3 - 2

Pisah teks

Umume pangembang duwe paling ora sapisan kode ditulis kanggo mecah teks input dadi bagean komponen, kayata ngowahi akun karyawan adhedhasar teks dadi sakumpulan kolom. Kelas kasebut Patternnyedhiyakake kemampuan kanggo ngatasi tugas sing angel iki kanthi luwih gampang nggunakake rong cara pamisah teks:
  • Cara String[] split(CharSequence text, int limit)pamisah textmiturut sing ditemokake cocog karo pola obyek Patternlan ngasilake asil ing array. Saben unsur array nemtokake urutan teks sing dipisahake saka urutan sabanjure kanthi fragmen teks sing cocog karo pola (utawa pungkasan teks). Unsur-unsur array ing urutan sing padha katon ing text.

    Ing metode iki, jumlah unsur array gumantung ing parameter limit, sing uga ngontrol jumlah sing cocog sing bisa ditemokake.

    • Nilai positif nggoleki ora luwih saka limit-1sing cocog lan dawane array ora luwih saka limitunsur.
    • Yen nilai negatif, kabeh cocog sing bisa digoleki, lan dawa array bisa kasepakatan.
    • Yen nilai nol, kabeh bisa cocog bakal digoleki, dawa array bisa kasepakatan, lan garis kosong ing mburi dibuwak.

  • Cara kasebut String[] split(CharSequence text)nelpon cara sadurunge kanthi 0 minangka argumen watesan lan ngasilake asil telpon kasebut.
Ing ngisor iki minangka asil saka cara split(CharSequence text)kanggo ngrampungake masalah pamisah akun karyawan menyang lapangan sing kapisah saka jeneng, umur, alamat pos lan gaji:
Pattern p = Pattern.compile(",\\s");
String[] fields = p.split("John Doe, 47, Hillsboro Road, 32000");
for (int i = 0; i < fields.length; i++)
   System.out.println(fields[i]);
Kode ing ndhuwur nggambarake ekspresi reguler kanggo nemokake karakter koma sing langsung diterusake karo karakter spasi siji. Mangkene asil eksekusi:
John Doe
47
Hillsboro Road
32000

Predikat cithakan lan Streams API

Ing Jawa 8, Patternana metode muncul ing kelas . Cara iki nggawe predikat (fungsi kanthi nilai boolean) sing digunakake kanggo cocog karo pola kasebut. Panggunaan metode iki ditampilake ing cuplikan kode ing ngisor iki: Predicate asPredicate()
List progLangs = Arrays.asList("apl", "basic", "c", "c++", "c#", "cobol", "java", "javascript", "perl", "python", "scala");
Pattern p = Pattern.compile("^c");
progLangs.stream().filter(p.asPredicate()).forEach(System.out::println);
Kode iki nggawe dhaptar jeneng basa pamrograman, banjur nyusun pola kanggo nemokake kabeh jeneng sing diwiwiti karo huruf c. Baris pungkasan kode ing ndhuwur ngleksanakake nampa stream serial data karo dhaftar iki minangka sumber. Nyetel panyaring nggunakake fungsi Boolean asPredicate()sing ngasilake bener nalika jeneng kasebut diwiwiti kanthi huruf clan ngulang liwat stream, nyithak jeneng sing cocog karo output standar. Baris pungkasan iki padha karo loop reguler ing ngisor iki, sing dikenal saka aplikasi RegexDemo saka Part 1:
for (String progLang: progLangs)
   if (p.matcher(progLang).find())
      System.out.println(progLang);

Metode kelas matcher

Kayata saka kelas Matchernjlèntrèhaké mekanisme kanggo nindakake operasi pencocokan pola ing urutan karakter kanthi interpretasi ekspresi reguler kompilasi kelas Pattern. Obyek kelas Matcherndhukung macem-macem jinis operasi telusuran pola:
  • Cara boolean find()nggoleki teks input kanggo pertandhingan sabanjure. Cara iki wiwit mindhai ing awal teks sing ditemtokake utawa ing karakter pisanan sawise pertandhingan sadurunge. Opsi kapindho mung bisa ditindakake yen telpon sadurunge kanggo metode iki bali bener lan solver ora direset. Ing kasus apa wae, yen telusuran sukses, nilai boolean bener bakal bali. Conto cara iki bisa ditemokake ing RegexDemoPart 1.

  • Cara kasebut boolean find(int start)ngreset matcher lan nggoleki teks kanggo match sabanjure. Ndeleng diwiwiti saka posisi sing ditemtokake dening parameter start. Yen telusuran sukses, nilai boolean bener bakal bali. Contone, m.find(1);mindai teks wiwit saka posisi 1(posisi 0 ora digatekake). Yen parameter startngandhut nilai negatif utawa nilai luwih saka dawa teks matcher, cara mbalang pangecualian java.lang.IndexOutOfBoundsException.

  • Cara kasebut boolean matches()nyoba cocog kabeh teks menyang pola. Iki ngasilake nilai boolean sing bener yen kabeh teks cocog karo pola kasebut. Contone, kode kasebut Pattern p = Pattern.compile("\\w*"); Matcher m = p.matcher("abc!"); System.out.println(p.matches());metu falseamarga karakter kasebut !dudu karakter tembung.

  • Cara kasebut boolean lookingAt()nyoba cocog karo teks sing ditemtokake karo pola. Cara iki ngasilake bener yen ana bagean teks sing cocog karo pola kasebut. Ora kaya metode matches();, kabeh teks ora kudu cocog karo pola kasebut. Contone, Pattern p = Pattern.compile("\\w*"); Matcher m = p.matcher("abc!"); System.out.println(p.lookingAt());bakal output true, wiwit awal teks abc!mung kasusun saka tembung-mbentuk karakter.

Ora kaya obyek kelas Pattern, obyek kelas Matchernahan informasi negara. Kadhangkala sampeyan kudu ngreset matcher kanggo mbusak informasi iki sawise panelusuran pola wis rampung. Cara ing ngisor iki kasedhiya kanggo ngreset solver:
  • Cara Matcher reset()ngreset kahanan matcher, kalebu posisi sing bakal ditambahake menyang mburi (reset menyang 0). Operasi telusuran pola sabanjure diwiwiti ing wiwitan teks matcher. Ngasilake referensi menyang obyek saiki Matcher. Contone, m.reset();ngreset solver sing dirujuk dening m.

  • Cara kasebut Matcher reset(CharSequence text)ngreset status solver lan nyetel teks solver anyar dadi text. Operasi telusuran pola sabanjure diwiwiti ing wiwitan teks matcher anyar. Ngasilake referensi menyang obyek saiki Matcher. Contone, m.reset("new text");ngreset solver sing dirujuk mlan nyetel teks solver anyar menyang "new text".

Ungkapan Biasa ing Basa Jawa, Part 3 - 3

Nambahake teks nganti pungkasan

Posisi matcher sing bakal ditambahake ing pungkasan nemtokake wiwitan teks matcher sing ditambahake ing pungkasan obyek saka jinis java.lang.StringBuffer. Cara ing ngisor iki nggunakake posisi iki:
  • Cara kasebut Matcher appendReplacement(StringBuffer sb, String replacement)maca karakter teks matcher lan ditambahake ing pungkasan obyek StringBuffersing dirujuk dening argumen sb. Cara iki mandheg maca ing karakter pungkasan sadurunge cocog pola sadurunge. Sabanjure, cara kasebut nambahake karakter saka obyek saka jinis Stringsing dirujuk dening argumen replacementmenyang mburi obyek StringBuffer(senar kasebut replacementbisa ngemot referensi kanggo urutan teks sing dijupuk sajrone panelusuran sadurunge; iki ditemtokake nggunakake karakter ($)lan nomer grup sing dijupuk). Akhire, cara nyetel Nilai saka posisi matcher kanggo appended menyang posisi karakter cocog pungkasan plus siji, lan banjur bali referensi kanggo matcher saiki.

  • Cara kasebut Matcher appendReplacement(StringBuffer sb, String replacement)mbuwang pangecualian java.lang.IllegalStateExceptionyen matcher durung nemokake sing cocog utawa upaya telusuran sadurunge gagal. Mbuwang pangecualian IndexOutOfBoundsExceptionyen baris kasebut replacementnemtokake klompok panangkepan sing ora ana ing pola kasebut).

  • Cara kasebut StringBuffer appendTail(StringBuffer sb)nambahake kabeh teks menyang obyek StringBufferlan ngasilake referensi kanggo obyek kasebut. Sawise nelpon metode pungkasan appendReplacement(StringBuffer sb, String replacement), nelpon metode appendTail(StringBuffer sb)kanggo nyalin teks sing isih ana menyang obyek StringBuffer.

Klompok sing dijupuk
Nalika sampeyan ngelingi saka Part 1, grup panangkepan minangka urutan karakter sing dilebokake ing kurung ( ()) metakarakter. Tujuan saka konstruksi iki yaiku kanggo nyimpen karakter sing ditemokake kanggo digunakake maneh nalika cocog pola. Kabeh karakter saka grup sing dijupuk dianggep minangka sakabehe sajrone panelusuran pola.
Kode ing ngisor iki nelpon appendReplacement(StringBuffer sb, String replacement)lan cara appendTail(StringBuffer sbkanggo ngganti kabeh kedadeyan saka urutan karakter ing teks sumber catkaro caterpillar:
Pattern p = Pattern.compile("(cat)");
Matcher m = p.matcher("one cat, two cats, or three cats on a fence");
StringBuffer sb = new StringBuffer();
while (m.find())
   m.appendReplacement(sb, "$1erpillar");
m.appendTail(sb);
System.out.println(sb);
Nggunakake grup dijupuk lan referensi ing teks panggantos ngandhani program kanggo masang erpillarsawise saben kedadean saka cat. Asil saka eksekusi kode iki katon kaya iki: one caterpillar, two caterpillars, or three caterpillars on a fence

Ngganti teks

Kelas kasebut Matchermenehi rong cara kanggo ngganti teks, pelengkap kanggo appendReplacement(StringBuffer sb, String replacement). Nggunakake metode iki, sampeyan bisa ngganti salah siji kedadeyan pisanan saka [teks sing diganti] utawa kabeh kedadeyan:
  • Cara String replaceFirst(String replacement)ngreset matcher, nggawe obyek anyar String, nyalin kabeh karakter teks matcher (nganti pertandhingan pisanan) menyang string iki, nambah karakter saka pungkasan replacement, nyalin karakter sing isih ana menyang string lan ngasilake obyek String(senar kasebut replacementbisa ngemot referensi kanggo sing dijupuk sajrone urutan teks telusuran sadurunge nggunakake simbol dolar lan nomer grup sing dijupuk).

  • Cara iki String replaceAll(String replacement)makaryakke padha karo cara String replaceFirst(String replacement), nanging ngganti replacementkabeh sing ditemokake cocog karo karakter saka senar.

Ekspresi reguler \s+nggoleki siji utawa luwih karakter spasi putih ing teks input. Ing ngisor iki, kita bakal nggunakake ekspresi reguler iki lan nelpon cara replaceAll(String replacement)kanggo mbusak spasi duplikat:
Pattern p = Pattern.compile("\\s+");
Matcher m = p.matcher("Удаляем      \t\t лишние пробелы.   ");
System.out.println(m.replaceAll(" "));
Mangkene asile: Удаляем лишние пробелы. Ungkapan Reguler ing Basa Jawa, Perangan 4 Ekspresi Reguler ing Basa Jawa, Perangan 5
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION