Maison >Java >javaDidacticiel >Comment récupérer efficacement toutes les correspondances Regex sous forme de tableau en Java ?

Comment récupérer efficacement toutes les correspondances Regex sous forme de tableau en Java ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-28 05:50:211074parcourir

How to Efficiently Retrieve All Regex Matches as an Array in Java?

Récupérer les correspondances Regex sous forme de tableau

En Java, déterminer si un modèle donné correspond à une chaîne spécifique est simple. Cependant, lors de la gestion de plusieurs correspondances, il peut être difficile de les rassembler dans un tableau. Pour résoudre ce problème, plongez dans ce guide pour découvrir comment utiliser efficacement les correspondances regex.

Approche itérative

Pour accumuler des correspondances dans un tableau, exploitez une combinaison de Matcher et String :

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

...

List<String> allMatches = new ArrayList<>();
Matcher m = Pattern.compile("your regular expression here")
    .matcher(yourStringHere);
while (m.find()) {
  allMatches.add(m.group());
}

Ce code établit un objet Matcher qui trouve systématiquement les sous-chaînes correspondantes dans la chaîne d'entrée. Chaque correspondance réussie est ajoutée à la liste allMatches. Enfin, convertissez-le en tableau à l'aide de allMatches.toArray(new String[0]):

String[] matchesArr = allMatches.toArray(new String[0]);

Itérable personnalisé pour les correspondances plus lentes

Vous pouvez également envisager d'implémenter un itérateur paresseux pour parcourir et consommer immédiatement les correspondances sans traitement inutile :

public static Iterable<MatchResult> allMatches(
    final Pattern p, final CharSequence input) {
  return new Iterable<MatchResult>() {
    public Iterator<MatchResult> iterator() {
      return new Iterator<MatchResult>() {
        // Internal Matcher
        final Matcher matcher = p.matcher(input);
        // Lazy-filled MatchResult
        MatchResult pending;

        public boolean hasNext() {
          if (pending == null && matcher.find()) {
            pending = matcher.toMatchResult();
          }
          return pending != null;
        }

        public MatchResult next() {
          if (!hasNext()) { throw new NoSuchElementException(); }
          MatchResult next = pending;
          pending = null;
          return next;
        }

        public void remove() { throw new UnsupportedOperationException(); }
      };
    }
  };
}

Utilisez-le comme suit :

for (MatchResult match : allMatches(
    Pattern.compile("[abc]"), "abracadabra")) {
  System.out.println(match.group() + " at " + match.start());
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn