Erstatte med regex
replaceAll og bakreferanser
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:
replaceAllogreplaceFirstbytter ut treff;Stringtilbyr snarveier.$1/${name}setter inn fangstgrupper i erstatninger; escape en bokstavelig$som\$eller medquoteReplacement.- Funksjonsformen til
replaceAllberegner erstatninger ut fra hvert treff. appendReplacement+appendTailgir full manuell kontroll.
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
- Kompilere mønstre
- Finne og matche
- Fangstgrupper
- Erstatte med regex