Java Academy · leksjon

Erstatte med regex

replaceAll og bakreferanser

Leksjon 4 av 413 trinn

Erstatte med regex er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Erstatte med regex

Regex brukes ikke bare til søking; det kan også transformere tekst. replaceAll bytter ut hvert treff med en erstatningsstreng.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("a1b22c333");
        System.out.println(m.replaceAll("#"));
    }
}

String.replaceAll-snarvei

String.replaceAll(regex, replacement) er en praktisk énlّinersløsning som kompilerer mønsteret internt.

public class Main {
    public static void main(String[] args) {
        String cleaned = "hello   world  again".replaceAll("\\s+", " ");
        System.out.println(cleaned);
    }
}

replaceFirst

replaceFirst bytter bare ut det første treffet og lar senere treff være urørt.

public class Main {
    public static void main(String[] args) {
        String s = "cat cat cat".replaceFirst("cat", "dog");
        System.out.println(s);
    }
}

Gruppereferanser i erstatninger

I erstatningsstrengen setter $1, $2 og så videre inn tekst som ble fanget av disse gruppene. Dette kan endre rekkefølgen på eller formatere innholdet.

public class Main {
    public static void main(String[] args) {
        String iso = "30/05/2026".replaceAll("(\\d{2})/(\\d{2})/(\\d{4})", "$3-$2-$1");
        System.out.println(iso);
    }
}

Referanser til navngitte grupper

Du kan også referere til navngitte grupper i erstatningen med ${name}.

public class Main {
    public static void main(String[] args) {
        String r = "alice@example.com"
            .replaceAll("(?<user>\\w+)@(?<host>[\\w.]+)", "${user} at ${host}");
        System.out.println(r);
    }
}

Escaping av dollar- og backslash-tegn

Siden $ og \ har spesialbetydning i erstatninger, må du escape en bokstavelig dollar med \$. Matcher.quoteReplacement escaper dem for deg.

import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        String price = "100".replaceAll("\\d+", Matcher.quoteReplacement("$100"));
        System.out.println(price);
    }
}

Beregnede erstatninger med replaceAll-funksjon

Siden Java 9 kan Matcher.replaceAll ta imot en funksjon, slik at du kan beregne hver erstatning ut fra treffet.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("a1 b2 c3");
        String out = m.replaceAll(mr -> String.valueOf(Integer.parseInt(mr.group()) * 10));
        System.out.println(out);
    }
}

Gjøre treffede ord til store bokstaver

Funksjonsformen er spesielt nyttig når erstatningen avhenger av den treffede teksten, for eksempel når hvert ord skal gjøres om til store bokstaver.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\b\\w").matcher("hello there world");
        String title = m.replaceAll(mr -> mr.group().toUpperCase());
        System.out.println(title);
    }
}

appendReplacement og appendTail

For full kontroll kan du bruke en løkke med find og bygge resultatet med appendReplacement og deretter appendTail. Dette er den klassiske teknikken på lavt nivå.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("a1b2");
        StringBuilder sb = new StringBuilder();
        while (m.find()) {
            m.appendReplacement(sb, "[" + m.group() + "]");
        }
        m.appendTail(sb);
        System.out.println(sb);
    }
}

Tilbakehenvisninger i mønsteret

Tilbakehenvisninger i mønsteret (\1) matcher gjentatt tekst og er nyttige for å slå sammen doble ord under erstatning.

public class Main {
    public static void main(String[] args) {
        String fixed = "the the end end".replaceAll("\\b(\\w+) \\1\\b", "$1");
        System.out.println(fixed);
    }
}

Fjerne uønskede tegn

En vanlig bruk er å rense inndata ved å erstatte alt utenfor et tillatt tegnsett med en tom streng.

public class Main {
    public static void main(String[] args) {
        String digits = "(555) 123-4567".replaceAll("[^0-9]", "");
        System.out.println(digits);
    }
}

Hurtigsjekk

I en erstatningsstreng for replaceAll, hva betyr $2?

Oppsummering

Du har transformert tekst med regex:

  • replaceAll og replaceFirst bytter ut treff; String tilbyr snarveier.
  • $1 / ${name} setter inn fangstgrupper i erstatninger; escape en bokstavelig $ som \$ eller med quoteReplacement.
  • Funksjonsformen til replaceAll beregner erstatninger ut fra hvert treff.
  • appendReplacement + appendTail gir full manuell kontroll.
Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Erstatte med regex» gratis?

Ja – hele teksten i «Erstatte med regex» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Erstatte med regex»?

replaceAll og bakreferanser Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Erstatte med regex»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Kompilere mønstre
  2. Finne og matche
  3. Fangstgrupper
  4. Erstatte med regex
← Tilbake til Java Academy