Comment utiliser Pattern, Matcher dans l'API Java regex pour supprimer une ligne spécifique
Oct 19 2020
J'ai une division de chaîne compliquée, je dois supprimer les commentaires , les espaces et conserver tous les nombres mais changer toutes les chaînes en caractères . Si le -signe est au début et suivi d'un nombre, traitez-le comme un nombre négatif plutôt qu'un opérateur
le commentaire a le style de ?<space>comments<space>?(les commentaires sont un espace réservé)
Contribution :
-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b
production :
["-122","+","2","?","s","a","b"]
(toute la chaîne en caractère et pas d'espace, pas de commentaires)
Réponses
2 ArvindKumarAvinash Oct 19 2020 at 05:41
- Remplacez la chaîne indésirable
\s*\?\s*\w+\s*(?=\?)par"". Vous pouvez enchaînerString#replaceAllpour supprimer tout espace blanc restant. Notez que cela?=signifie une anticipation positive et ici, cela signifie\s*\?\s*\w+\s*suivi d'un?. J'espère que vous savez déjà que\sspécifie les espaces et\wspécifie un caractère de mot. - Ensuite, vous pouvez utiliser l'expression régulière,
^-\d+|\d+|\Dqui signifie soit un entier négatif au début (c'est-à-dire^-\d+) ou des chiffres (c'est\d+-à- dire ) ou un non-chiffre (\D).
Démo:
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());
}
}
}
Production:
-122
+
2
?
s
a
b