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
Libérer: 2024-11-28 05:50:21
original
992 Les gens l'ont consulté

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());
}
Copier après la connexion

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]);
Copier après la connexion

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(); }
      };
    }
  };
}
Copier après la connexion

Utilisez-le comme suit :

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

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal