Blogul Naik - înlocuirea și eliminarea caracterelor duplicate într-un șir

Î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:

  1. înlocui (char oldChar, char newChar): String
  2. înlocuire (țintă CharSequence, înlocuire CharSequence): String
  3. replaceAll (String regex, String replacement): String
  4. 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.

  1. 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 "\\"

  • După ștergerea a două simboluri repetate, se pot forma din nou caractere repetate.
    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în timp ce (len! = text.length ()); // compara noua lungime a șirului la lungimea salvată System.out.println (text); // "k"

  • Luați în considerare următorul exemplu. Este necesar să ștergeți toate simbolurile consecutive.
    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.

  • Acum ia în considerare înlocuirea. Sarcina: există o linie, este necesar să lăsați doar unul din cele două simboluri identice consecutive.
    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

  • Și în final, vom înlocui în linie toate caracterele care se repetă consecutiv cu un singur caracter.
    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.







    Trimiteți-le prietenilor: