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
- Sostituisci la stringa indesiderata
\s*\?\s*\w+\s*(?=\?)con"". Puoi concatenareString#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. - 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