În acest articol, vom analiza înlocuirea și eliminarea caracterelor duplicat într-un șir folosind expresii regulate Java.
Înlocuirea și ștergerea caracterelor duplicate se va face prin înlocuirea clasei String.
Clasa String are patru metode pentru înlocuirea caracterelor. Iată semnătura lor:
- înlocui (char oldChar, char newChar): String
- înlocuire (țintă CharSequence, înlocuire CharSequence): String
- replaceAll (String regex, String replacement): String
- replaceFirst (String regex, String replacement): String
Primele două metode în cazul nostru nu vor fi utile, deoarece ele sunt necesare pentru a înlocui un caracter (char) cu un alt caracter sau o secvență de caractere (CharSequence) cu o altă secvență. CharSequence este o interfață care implementează clase: String, StringBuilder și StringBuffer.
Să ne ocupăm de ultimele două metode: replaceAll and replaceFirst. Ambele metode acceptă regexul ca primul parametru și înlocuiesc al doilea parametru. replaceAll înlocuiește toate potrivirile, iar replaceFirst înlocuiește numai prima potrivire. În acest articol, va fi utilizat numai înlocuitorul.
- Să ne imaginăm următoarea problemă: trebuie să eliminați din șir toate cele două simboluri identice care se află una lângă cealaltă. De exemplu, șirul "keeshh" ar trebui să se încheie cu șirul "ks"
String text = "keeshh"; Rezultatul șirului = text.replaceAll ("([a-z]) \\ 1", ""); System.out.println (rezultat); // "ks"
replaceAll - pentru a înlocui toate potrivirile
[a-z] - expresia indică faptul că ar trebui să existe un caracter în acest interval în intervalul de la a la z.
() - parantezele indică gruparea, care poate fi menționată prin număr, iar numerotarea începe de la un număr
\ 1 - indică faptul că în acest loc ar trebui să existe același text ca și în gruparea la numărul 1. Spătarul "\" trebuie să fie scos, astfel încât în expresie două tăișuri "\\"
De exemplu, dacă linia "keeshhs" este înlocuită cu două caractere consecutive, veți obține "kss", dar și substringul "ss" poate fi șters. Introduceți codul descris mai sus într-o buclă care va fi repetată până când toate simbolurile repetate vor fi înlocuite. În această implementare, vom încerca să ștergem repetările, în timp ce lungimea șirului este scurtată (scurtată)
String text = "keeshhs"; int len; face
De exemplu, pentru șirul "keeeshh", rezultatul ar trebui să fie "ks". Implementare:
Așa cum probabil ați observat după ce a fost adăugat simbolul +. Plus în mod regulat înseamnă că simbolul sau gruparea precedentă ar trebui să se întâlnească de la un moment sau mai mult. De asemenea, puteți include acest cod într-o buclă pentru a înlocui repetițiile care au apărut.
Exemplu: din șirul "kkeesshh" primiți șirul "kesh".
Implementare:
Textul șirului = "kkeesshh"; text = text.replaceAll ("([a-z]) \\ 1", "$ 1"); System.out.println (text); // "kesh"
Pentru înlocuire, am folosit expresia $ 1. care spune că textul corespunzător expresiei regulate trebuie înlocuit cu textul corespunzător grupării cu numărul 1. În cazul nostru, gruparea cu numărul este textul corespunzător modelului [a-z].
Puteți rescrie codul folosind numărul 2 al grupului pentru înlocuire:
Textul șirului = "kkeesshh"; text = text.replaceAll ("([a-z]) (\\ 1)", "$ 2"); System.out.println (text); // "kesh"
Al doilea grup corespunde modelului \\ 1
De exemplu, linia "keeeeessshh" este convertită la "kesh".
Implementare:
String text = "keeeeessshh"; text = text.replaceAll ("([a-z]) \\ 1+", "$ 1"); System.out.println (text); // "kesh"
Folosirea expresiilor obișnuite vă permite să scrieți un cod mai compact și, probabil, să economisiți timp pe tastarea codului, dacă stăpâniți bine expresiile regulate.