public class Filtre extends Zoznam<Filtre.Filter>
Táto trieda zoskupuje a zjednodušuje prácu s regulárnymi výrazmi.
 V podstate ide o zaobalenie práce triedami Pattern
 a Matcher. Okrem toho implementuje jedno z častých
 použití regulárnych výrazov – aplikovanie zoznamu filtrov na zadaný
 reťazec.
Táto trieda reprezentuje zoznam filtrov, ktoré
 budú postupne aplikované na reťazec zadaný ako parameter metódy použi. Každý z filtrov môže mať nastavený príznak zastav, ktorého hodnota true indikuje, že sa
 má spracovanie po úspešnej aplikácii tohto filtra (ako prvku v zozname
 filtrov) zastaviť (a nemá sa pokračovať ďalším filtrom v rámci zoznamu).
Príklady použitia:
Nižšie sú fragmenty kódov demonštrujúce rôzne situácie. (Sú v nich použité rôzne spôsoby konštrukcie filtrov.)
Prvý príklad odfiltruje meno šablóny PNG sekvencie a vytvorí z neho meno konfiguračného súboru časovania.
finalStringnázovPoložky ="animácia-***.png";finalFiltrefilterNázvuSúboru =newFiltre(newFiltre.Filter("-?\\*+-?","-"),newFiltre.Filter("(?i:\\.png$)",".tim"),newFiltre.Filter("-+\\.tim",".tim"));StringnázovSúboru = filterNázvuSúboru.použi(názovPoložky);System.out.println("názovSúboru: "+ názovSúboru);
Výsledok:
názovSúboru: animácia.tim
V druhom príklade filtre hľadajú adresy v atribútoch href HTML
 kódu, ale len v tele HTML dokumentu:
Stringodpoveď ="<!DOCTYPE html>\r\n<html>\r\n<head>"+"\r\n<meta charset=\"UTF-8\" />\r\n<title>Titulok</title>"+"\r\n<link href=\"style.css\" rel=\"stylesheet\" "+"type=\"text/css\" />\r\n</head>\r\n\r\n<body>\r\n\r\n"+"<header><h1>Nadpis v hlavičke</h1></header>\r\n\r\n"+"<section>\r\n\r\n<div>\r\n\t<p><a href=\"https://"+"pdf.truni.sk/\">Pedagogická fakulta</a></p>\r\n</div>"+"\r\n\r\n</section>\r\n</body>\r\n</html>";finalFiltrehľadajAdresy =newFiltre("[ \r\n\t]+"," ",".*?<body","",".*?href=\"([^\"]+)","$1\n","[^\n]+$","");finalPatternrozdeľAdresy =Pattern.compile("\n"); odpoveď = hľadajAdresy.použi(odpoveď);finalString[] adresy = rozdeľAdresy.split(odpoveď);for(Stringadresa : adresy)System.out.println("adresa: "+ adresa);
Výsledok:
adresa: https://pdf.truni.sk/
Tretí príklad spojí riadky kódované algoritmom Base64 do jedného reťazca
 a odfiltruje začiatočný identifikátor data:….
finalFiltrespojBase64 =newFiltre(); spojBase64.pridaj("^\\s*data:.*?;base64,",""); spojBase64.pridaj("\\s+","");StringnaSpojenie ="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAg"+"CAYAAABzenr0AAABb0lEQVR42mN48IDh/0BihlEHjDqA\r\n\tFMV37jP/X3JZ/3/8kdT/"+"ert6/rNvXPWfYcMGMFbePuV/xOFssDxIHdUdMPmC7X+F7dPhFuLDIHUg\r\n\t9VRxwM37"+"bP8DDxUSZTE69j1QDNZPtgNAmp3316AYyrd56f/MY7H/V1/R/H/pLjdY3dW7HP83XVP5\r"+"\n\tX3Ai4r/QlkUo6m32NuJ1BF4HoPs8+nDG/3N3+PD6COSopKPJGCFBsgNAcYhsCMh3pC"+"RYkHpk/bjS\r\n\tBAOu1I6c4EA+JyeLIYcEyDxsuQOrA0BZCTnOCQU7vugQ3TIfbtbCy0"+"bEOQCUz2GaQAmOkoIGOSpA\r\n\t5QRRDgAVMjBNoNROiQNAuQO5sCLKASwb18I1wbIauR"+"iURZETI1EOwKeBrPKeVAcMeAgMeBoY8Fww\r\n\t4OXAgJeEA14X4KsNCeUKkHzasQTKa0"+"Ny2wPIcU5xe2DAW0SDok2Ir1WMXGKCLAXlc1BWo0mreLRj\r\n\tMmwdAABfpbXzmG2kBQ"+"AAAABJRU5ErkJggg==";Stringspojené = spojBase64.použi(naSpojenie);System.out.println("spojené: "+ spojené);
Výsledok:
Výsledkom bude reťazec vhodný na prevod z kódovania Base64 do binárneho tvaru (tu je umelo zalomený na zlepšenie čitateľnosti):
spojené: iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABb0lEQVR42mN48IDh/0BihlE HjDqAFMV37jP/X3JZ/3/8kdT/ert6/rNvXPWfYcMGMFbePuV/xOFssDxIHdUdMPmC7X+F7dPhFuLDIHU g9VRxwM37bP8DDxUSZTE69j1QDNZPtgNAmp3316AYyrd56f/MY7H/V1/R/H/pLjdY3dW7HP83XVP5X3A i4r/QlkUo6m32NuJ1BF4HoPs8+nDG/3N3+PD6COSopKPJGCFBsgNAcYhsCMh3pCRYkHpk/bjSBAOu1I6 c4EA+JyeLIYcEyDxsuQOrA0BZCTnOCQU7vugQ3TIfbtbCy0bEOQCUz2GaQAmOkoIGOSpA5QRRDgAVMjB NoNROiQNAuQO5sCLKASwb18I1wbIauRiURZETI1EOwKeBrPKeVAcMeAgMeBoY8Fww4OXAgJeEA14X4Ks NCeUKkHzasQTKa0Ny2wPIcU5xe2DAW0SDok2Ir1WMXGKCLAXlc1BWo0mreLRjMmwdAABfpbXzmG2kBQA AAABJRU5ErkJggg==
Posledný príklad hľadá riadky časových značiek titulkov vo formáte SRT a v nájdených riadkoch identifikuje počiatočnú a koncovú časovú známku.
finalFiltre.FilterfilterČasu =newFiltre.Filter("([0-9]+):([0-9]+):([0-9]+),([0-9]+)",null);longdajČas(Strings) {Matcherma = filterČasu.zhoda(s);if(ma.matches()) {doublemili =Svet.reťazecNaReálneČíslo("0,"+ ma.group(4));returnSvet.reťazecNaCeléČíslo(ma.group(1)) *3600000+// hrSvet.reťazecNaCeléČíslo(ma.group(2)) *60000+// mtSvet.reťazecNaCeléČíslo(ma.group(3)) *1000+// sc(long)(mili *1000.0);// ms}return-1; }
finalFiltre.FilterčasTitulkov =newFiltre.Filter("^\\s*([0-9:,]+)\\s*-->\\s*([0-9:,]+)\\s*$",null);String[] titulky = {"1","00:00:00,000 --> 00:00:02,750","No a teraz úplná zmena.","","2","00:00:03,500 --> 00:00:07,500","Toto je úplne neznámy chlapík:","Thomas Fantet de Lagny","","3","00:00:07,875 --> 00:00:09,750","To je matematik…", };for(Stringúdaj : titulky) {if(údaj.isEmpty())continue;Matcherma = časTitulkov.zhoda(údaj);if(ma.matches()) {longzačiatok = dajČas(ma.group(1));longkoniec = dajČas(ma.group(2));// …System.out.println("začiatok: "+ začiatok);System.out.println("koniec: "+ koniec); }elseSystem.out.println("nie je čas"); }
Výsledok:
nie je čas začiatok: 0 koniec: 2750 nie je čas nie je čas začiatok: 3500 koniec: 7500 nie je čas nie je čas nie je čas začiatok: 7875 koniec: 9750 nie je čas
Zoznam, 
Filtre.Filter, 
Serializovateľnosť| Modifikátor a typ | Trieda a opis | 
|---|---|
| static class  | Filtre.FilterTáto vnorená trieda je trieda prvkov zoznamu triedy  Filtrea zároveň môže slúžiť na sprostredkovanie jednoduchších úkonov
 s regulárnymi výrazmi. | 
Zoznam.ObratenyIterator<Typ>, Zoznam.ObrátenýIterátor<Typ>capacityIncrement, elementCount, elementDatamodCount| Konštruktor a opis | 
|---|
| Filtre()Predvolený konštruktor – vytvorí prázdny zoznam filtrov. | 
| Filtre(Collection<Filtre.Filter> filtre)Vytvorí zoznam filtrov obsahujúci zadané filtre. | 
| Filtre(Filtre.Filter... filtre)Vytvorí zoznam filtrov obsahujúci zadané filtre. | 
| Filtre(String... filtre)Vytvorí zoznam filtrov obsahujúci zadané filtre. | 
| Modifikátor a typ | Metóda a opis | 
|---|---|
| int | citaj(String názovSúboru) Alias pre čítaj. | 
| int | čítaj(String názovSúboru)Prečíta zoznam filtrov zo zadaného konfiguračného súboru. | 
| String | dajNahradenie(int i)Táto metóda slúži na zvýšenie pohodlia prístupu k šablóne nahradenia
 filtra. | 
| Pattern | dajVzor(int i)Táto metóda slúži na zvýšenie pohodlia prístupu ku vzoru filtra. | 
| Matcher | dajZhodu(int i)Táto metóda slúži na zvýšenie pohodlia prístupu k inštancii zhody
 filtra ( Matcher). | 
| Matcher | dajZhodu(int i,
        String reťazec)Táto metóda slúži na zvýšenie pohodlia prístupu k metóde
 porovnávania zhody i-teho filtra so zadaným reťazcom. | 
| int | parsuj(String blokTextu)Pridá filtre podľa zadaného bloku konfiguračného textu. | 
| int | parsuj(String[] konfiguračnéPole)Pridá filtre podľa zadaného konfiguračného poľa. | 
| String | pouzi(String reťazec) Alias pre použi. | 
| String | použi(String reťazec)Použije na zadaný reťazec všetky filtre tejto inštancie. | 
| void | pridaj(String vzor,
      String nahradenie)Táto metóda slúži na pridanie nového filtra do tohto zoznamu
 filtrov, ktorý bude vytvorený podľa zadaných parametrov (vzoru
 a zhody). | 
aktualny, aktuálny, bolPrejdenyDokola, bolPrejdenýDokola, citaj, citaj, čítaj, čítaj, daj, daj, dalsi, dalsiPrvok, ďalší, ďalšíPrvok, dlzka, dĺžka, hladaj, hľadaj, hladaj, hľadaj, hladajOdzadu, hľadajOdzadu, hladajOdzadu, hľadajOdzadu, jePrazdny, jePrázdny, kapacita, nahodny, náhodný, nahodnyPrvok, náhodnýPrvok, nahrad, nahraď, najdi, nájdi, najdi, nájdi, najdiPosledny, nájdiPosledný, najdiPosledny, nájdiPosledný, naopak, naopak, nastav, obsahuje, odober, odober, odober, odoberOdKonca, odzadu, odzadu, pocet, pocitadlo, pocitadlo, pocitadloNaKoniec, pocitadloNaZaciatok, počet, počítadlo, počítadlo, počítadloNaKoniec, počítadloNaZačiatok, posledny, posledný, poslednyPrvok, poslednýPrvok, prazdny, prázdny, predchadzajuci, predchádzajúci, predchadzajuciPrvok, predchádzajúciPrvok, prejdenyDokola, prejdenýDokola, prepis, prepíš, presun, presuň, presun, presuň, presun, presuň, presun, presuň, pridaj, pridaj, pridaj, pridaj, prvy, prvý, prvyPrvok, prvýPrvok, tento, velkost, veľkosť, vloz, vlož, vrat, vráť, vrat, vráť, vymaz, vymaz, vymaz, vymazOdKonca, vymaž, vymaž, vymaž, vymažOdKonca, vymen, vymeň, vymen, vymeň, vymen, vymeň, vymen, vymeňadd, add, addAll, addAll, addElement, capacity, clear, clone, contains, containsAll, copyInto, elementAt, elements, ensureCapacity, equals, firstElement, forEach, get, hashCode, indexOf, indexOf, insertElementAt, isEmpty, iterator, lastElement, lastIndexOf, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeAllElements, removeElement, removeElementAt, removeIf, removeRange, replaceAll, retainAll, set, setElementAt, setSize, size, sort, spliterator, subList, toArray, toArray, toString, trimToSizeparallelStream, streampublic Filtre()
Predvolený konštruktor – vytvorí prázdny zoznam filtrov.
public Filtre(Filtre.Filter... filtre)
Vytvorí zoznam filtrov obsahujúci zadané filtre.
filtre – zoznam filtrov oddelený čiarkamipublic Filtre(Collection<Filtre.Filter> filtre)
Vytvorí zoznam filtrov obsahujúci zadané filtre.
filtre – kolekcia obsahujúca zoznam filtrovpublic int čítaj(String názovSúboru)
Prečíta zoznam filtrov zo zadaného konfiguračného súboru. Metóda
 očakáva v súbore zoradené dvojice alebo trojice riadkov s významom
 „regulárny výraz“ (vzor), „nahradenie“ (šablóna) a nepovinný riadok
 príznaku zastavenia spracovania (*).
 Dvojice/trojice riadkov môžu byť oddelené ľubovoľným množstvom
 prázdnych riadkov.
Trojice sú od dvojíc odlíšené jednoducho: jediným platným tretím riadkom je riadok obsahujúci iba hviezdičku (čo je neplatný regulárny výraz, takže nemôže byť začiatkom ďalšej dvojice alebo trojice). Dvojice/trojice riadkov môžu byť oddelené prázdnymi riadkami na zlepšenie čitateľnosti konfiguračného súboru. Prázdne riadky sú ignorované, okrem jediného prípadu – ak ide o druhý riadok dvojice/trojice.
Technicky je fungovanie metódy je zariadené tak, aby nenastávali sporné situácie. Riadky sú čítané sekvenčne a sú vyhodnocované takto:
Príznak zastavenia indikuje, že proces filtrovania sa má po úspešnom spracovaní toho filtra, ktorý má tento príznak nastavený zastaviť (t. j., že sa nemá pokračovať ďalšími filtrami v zozname). Keby mali tento príznak nastavený všetky filtre v zozname, tak sa spracovanie zastaví po prvom úspešnom spracovaní reťazca niektorým z filtrov.
Príklady zoznamov filtrov:
Toto sú ukážky toho, ako môžu byť uložené v súboroch zoznamy filtrov prvých troch príkladov z hlavného opisu triedy:
-?\*+-? - (?i:\.png$) .tim -+\.tim .tim
[ \r\n\t]+ .*?<body .*?href="([^"]+) $1\n [^\n]+$
^\\s*data:.*?;base64, \ \\s+ §
Poznámka: Na indikáciu toho, že aktuálny
 riadok neoznačuje začiatok nového filtra, ale vzťahuje sa k poslednému
 filtru a mení jeho nastavenie bol úmyselne vybraný taký reťazec, aby
 regulárny výraz, ktorý by mal oznaćovať nový filtre bol nezmyselný –
 samostatná * by znamenala „ľubovoľné opakovanie ničoho.“
Poznámka: Táto metóda nemaže zoznam filtrov,
 takže počet úspešne pridaných filtrov sa dá zistiť podľa toho, ako sa
 zmenila veľkosti zoznamu filtrov pred a po volaní tejto metódy. (Na
 zistenie veľkosti zoznamu použite napríklad odvodenú metódu veľkosť.)
názovSúboru – názov súboru, z ktorého majú byť prečítané definície
     filtrovpublic int parsuj(String blokTextu)
Pridá filtre podľa zadaného bloku konfiguračného textu. Blok textu
 je rozdelený na riadky, ktoré sú spracúvané rovnako ako keby boli
 prečítané zo súboru: pozri opis metódy čítaj.
Poznámka: Táto metóda nemaže zoznam filtrov,
 takže počet úspešne pridaných filtrov sa dá zistiť podľa toho, ako sa
 zmenila veľkosti zoznamu filtrov pred a po volaní tejto metódy. (Na
 zistenie veľkosti zoznamu použite napríklad odvodenú metódu veľkosť.)
blokTextu – blok konfiguračného textu obsahujúci definície filtrovnull),
     −2 ak bol zadaný prázdny reťazec ("" alebo
     "\uFEFF" – BOM)public int parsuj(String[] konfiguračnéPole)
Pridá filtre podľa zadaného konfiguračného poľa. Metóda považuje
 pole reťazcov za riadky, ktoré sú spracúvané rovnako ako keby boli
 prečítané zo súboru: pozri opis metódy čítaj.
Poznámka: Táto metóda nemaže zoznam filtrov,
 takže počet úspešne pridaných filtrov sa dá zistiť podľa toho, ako sa
 zmenila veľkosti zoznamu filtrov pred a po volaní tejto metódy. (Na
 zistenie veľkosti zoznamu použite napríklad odvodenú metódu veľkosť.)
konfiguračnéPole – konfiguračné pole obsahujúce definície filtrovnull),
     −2 ak bolo zadané prázdne polepublic void pridaj(String vzor, String nahradenie)
Táto metóda slúži na pridanie nového filtra do tohto zoznamu
 filtrov, ktorý bude vytvorený podľa zadaných parametrov (vzoru
 a zhody). V rámci tohto procesu je volaný konštruktor filtra, takže
 platia rovnaké informácie ako v jeho opise: Filter.Filter(vzor,
 nahradenie).
vzor – regulárny výraz na porovnávanie reťazcov (ktoré budú
     odovzdávané tomuto zoznamu filtrov prostredníctvom metódy použinahradenie – šablóna reťazca na nahrádzanie zhôd podľa regulárneho
     výrazu v parametri vzorpublic Pattern dajVzor(int i)
public String dajNahradenie(int i)
Táto metóda slúži na zvýšenie pohodlia prístupu k šablóne nahradenia
 filtra. Rovnaký efekt sa dá dosiahnuť volaním:
 daj(i).nahradenie.
public Matcher dajZhodu(int i)
public String použi(String reťazec)
Použije na zadaný reťazec všetky filtre tejto inštancie. Ak má
 niektorý z filtrov v zozname nastavený príznak zastav, tak sa spracovanie po úspešnom použití tohto filtra
 automaticky zastaví.
reťazec – reťazec na spracovanie