ホームページ > Java > &#&チュートリアル > Java ですべての正規表現一致を配列として効率的に取得するにはどうすればよいですか?

Java ですべての正規表現一致を配列として効率的に取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-28 05:50:21
オリジナル
1055 人が閲覧しました

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

正規表現の一致を配列として取得する

Java では、指定されたパターンが特定の文字列に一致するかどうかを判断するのは簡単です。ただし、複数の一致を処理する場合、それらを配列に収集するのは困難な場合があります。これに対処するには、このガイドを詳しく調べて、正規表現一致を効果的に利用する方法を見つけてください。

反復アプローチ

一致を配列に蓄積するには、Matcher と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());
}
ログイン後にコピー

このコードは、入力内で一致する部分文字列を体系的に検索する Matcher オブジェクトを確立します。 弦。成功した各一致は allMatches リストに追加されます。最後に、allMatches.toArray(new String[0]):

String[] matchesArr = allMatches.toArray(new String[0]);
ログイン後にコピー

Lazier Matches 用の Custom Iterable

を使用して配列に変換します。あるいは、不必要な処理を行わずに一致をトラバースして即座に消費する遅延イテレータ処理:

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(); }
      };
    }
  };
}
ログイン後にコピー

次のように使用します:

for (MatchResult match : allMatches(
    Pattern.compile("[abc]"), "abracadabra")) {
  System.out.println(match.group() + " at " + match.start());
}
ログイン後にコピー

以上がJava ですべての正規表現一致を配列として効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート