Naik - s blog - cseréje és eltávolítása ismétlődő karakterre

Ez a cikk meg fogja vizsgálni a csere és eltávolítását példányban karakterre Java reguláris kifejezéseket.
Csere, és távolítsa el ismétlődő karakterek lesznek a String osztályában csere funkciót.






A String osztály négy módszer karakter csere. Íme az aláírást:

  1. cserélje (char oldChar, char newChar): String
  2. cserélje (CharSequence cél, CharSequence csere): String
  3. replaceAll (String regex, Szálcsere): String
  4. replaceFirst (String regex, Szálcsere): String

Az első két módszer ebben az esetben nem hasznos, mert meg kell cserélni egy karakter (char) egy másik karakter vagy karaktersorozat (CharSequence) egy másik sorozatot. CharSequence - olyan felület, amely hajtja végre osztályok: String, StringBuilder és StringBuffer.
Nézzük laknak az utolsó két módszer: replaceAll és replaceFirst. Mindkét módszer első paraméter vesz egy reguláris kifejezés (regex), és a második paraméter helyettesítő szöveg (csere). replaceAll - cserélje mérkőzést, replaceFirst helyettesíti csak az első mérkőzés. Ez a cikk csak replaceAll használni.

  1. Képzeljük el a következő probléma: azt szeretnénk, hogy törölje az összes sorok mellett álló két azonos karakter. Például a «keeshh» vonalat kell végül kiderülhet vonal «ks»

String text = "keeshh"; Karakterlánc eredmény = text.replaceAll ( "([a-z]) \\ 1", ""); System.out.println (eredmény); // "KS"

replaceAll - funkció helyett az összes mérkőzést
[A-Z] - expressziós azt sugallja, hogy ez a hely, hogy egy karaktert tartományban tól Z-ig.
() - zárójelben a csoport, amely utalhat szám, a számozás egyikénél indul






\ 1 - azt jelzi, hogy ezen a ponton meg kell egyeznie a szöveget, mint a csoport szám 1. A backslash „\” kell megszökött, így szempontjából a két perjel „\\”

  • Eltávolítása után a két ismétlődő szimbólumok képezhető újra ismétlődő karaktereket.
    Például, ha «keeshhs» vonalat, cserélje ki a két egymást követő ismétlődő karaktereket, akkor viszont «kss», hanem azt a rész «ss» is el kell távolítani. Tedd be a fenti kódot a ciklusban, hogy ismételjük mindaddig, amíg nem lesz cserélni az összes ismétlődő szimbólumok. Ebben a megvalósításban, megpróbáljuk törölni ismétlés amíg változott (rövidített) string-hossz

    String text = "keeshhs"; int len; csinálwhile (len = text.length (!)); // összehasonlításba új húr hossza a tárolt System.out.println (text) hossza; // "k"

  • Tekintsük a következő példát. Meg kell távolítani az összes egymást követő ismétlődő karaktereket.
    Például «keeeshh» vonalakat eredményez lenni «ks». Megvalósítás:

    Ahogy talán már észre után edinichki adunk + karaktert. Plusz a rendszeres azt jelenti, hogy az előző, plusz a szimbólum vagy csoport meg kell felelnie egy vagy több alkalommal. Akkor is ezt a kódot a hurok cserélni újra megjelent ismétlés.

  • Most tekintsünk egy csere. Célkitűzés: Ahhoz, hogy egy húr, akkor kell két egymást követő azonos karaktert, hogy hagyja csak egy.
    Például: A «kkeesshh» vonalon sorakoznak «kesh».
    Megvalósítás:

    String text = "kkeesshh"; text = text.replaceAll ( "([a-z]) \\ 1", "$ 1"); System.out.println (szöveg); // "Kesh"

    Csereként az kifejezést használta $ 1. amely azt mondja, hogy a szöveg, hogy illeszkedik a reguláris kifejezésre kell cserélni szöveg megfelelő csoport száma 1. Ebben az esetben, a csoportosítás egy szám - ez a szöveg, amely egyezik egy mintával [a-z].
    Mi lehet átírni a kódot a csoport 2-es szám helyett

    String text = "kkeesshh"; text = text.replaceAll ( "([a-z]) (\\ 1)", "$ 2"); System.out.println (szöveg); // "Kesh"

    A második csoport felel meg a sablon \\ 1

  • És végül, cserélje vonal minden visszatérő karakterek egy karaktert.
    Például a húr «keeeeessshh» átalakult «kesh».
    Megvalósítás:

    String text = "keeeeessshh"; text = text.replaceAll ( "([a-z]) \\ 1+", "$ 1"); System.out.println (szöveg); // "Kesh"

    Reguláris kifejezések segítségével, hogy írjon kompakt kódot, és esetleg időt takarít meg a kódegyüttesnek, ha ez jó, hogy megtanulják a reguláris kifejezéseket.