Come utilizzare Pattern, Matcher nell'API regex di Java per rimuovere una riga specifica

Oct 19 2020

Ho una divisione delle stringhe complicata, devo rimuovere i commenti , gli spazi e mantenere tutti i numeri ma cambiare tutte le stringhe in caratteri . Se il -segno è all'inizio e seguito da un numero, trattalo come un numero negativo anziché come un operatore

il commento ha lo stile di ?<space>comments<space>?(il commento è un segnaposto)

Ingresso:

-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b

produzione :

 ["-122","+","2","?","s","a","b"]  

(tutta la stringa in carattere e nessuno spazio, nessun commento)

Risposte

2 ArvindKumarAvinash Oct 19 2020 at 05:41
  1. Sostituisci la stringa indesiderata \s*\?\s*\w+\s*(?=\?)con "". Puoi concatenare String#replaceAllper rimuovere eventuali spazi vuoti rimanenti. Nota che ?=significa lookahead positivo e qui significa \s*\?\s*\w+\s*seguito da a ?. Spero che tu sappia già che \sspecifica gli spazi bianchi e \wspecifica un carattere di parola.
  2. Quindi puoi usare la regex, ^-\d+|\d+|\Dche significa numero intero negativo all'inizio (cioè ^-\d+) o cifre (cioè \d+) o una non cifra ( \D).

Demo:

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

public class Main {
    public static void main(String[] args) {
        String str = "-122+2 ? comments ?sa b";
        str = str.replaceAll("\\s*\\?\\s*\\w+\\s*(?=\\?)", "").replaceAll("\\s+", "");

        Pattern pattern = Pattern.compile("^-\\d+|\\d+|\\D");
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

Produzione:

-122
+
2
?
s
a
b