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
  1. Remplacez la chaîne indésirable \s*\?\s*\w+\s*(?=\?)par "". Vous pouvez enchaîner String#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.
  2. 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