SORU
16 Mayıs 2011, PAZARTESİ


Düzenli dizi maçlar oluşturun

Java tüm düzenli bir dizi maçlar ama tek bir şey desen eşleşip eşleşmediğini kontrol edebilirsiniz gibi görünüyor değil mi (boolean) iade etmeye çalışıyorum. Biri bana her dize bir dizi belirli bir dize düzenli ifade eşleştirmesi form için düzenli bir maç kullanmak yardımcı olabilir? Teşekkürler!

CEVAP
16 Mayıs 2011, PAZARTESİ


Eşleştirici oluşturmak ve yinelenen bulmak eşleşen kullanmanız gerekir.

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

 ...

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

Bundan sonra, allMatches içeren maçlar ve allMatches.toArray(new String[0]) Eğer gerçekten bir ihtiyaç varsa, bir dizi almak için kullanabilirsiniz.


Ayrıca MatchResult üzerinde eşleşen döngü için yardımcı işlevler yazmak için kullanabilirsiniz Matcher.toMatchResult() yana döndürür, geçerli grup devletin bir anlık.

Örneğin tembel bir yineleyici yapalım yazabilirsiniz

for (MatchResult match : allMatches(pattern, input)) {
  // Use match, and maybe break without doing the work to find all possible matches.
}

bir şey yaparak, bu gibi:

public static Iterable<MatchResult> allMatches(
      final Pattern p, final CharSequence input) {
  return new Iterable<MatchResult>() {
    public Iterator<MatchResult> iterator() {
      return new Iterator<MatchResult>() {
        // Use a matcher internally.
        final Matcher matcher = p.matcher(input);
        // Keep a match around that supports any interleaving of hasNext/next calls.
        MatchResult pending;

        public boolean hasNext() {
          // Lazily fill pending, and avoid calling find() multiple times if the
          // clients call hasNext() repeatedly before sampling via next().
          if (pending == null && matcher.find()) {
            pending = matcher.toMatchResult();
          }
          return pending != null;
        }

        public MatchResult next() {
          // Fill pending if necessary (as when clients call next() without
          // checking hasNext()), throw if not possible.
          if (!hasNext()) { throw new NoSuchElementException(); }
          // Consume pending so next call to hasNext() does a find().
          MatchResult next = pending;
          pending = null;
          return next;
        }

        /** Required to satisfy the interface, but unsupported. */
        public void remove() { throw new UnsupportedOperationException(); }
      };
    }
  };
}

Bu ile

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

verir

a at 0
b at 1
a at 3
c at 4
a at 5
a at 7
b at 8
a at 10

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ArkticPlanet

    ArkticPlanet

    9 ŞUBAT 2010
  • Caina Mondo Zine

    Caina Mondo

    13 EKİM 2007
  • lilstevie89

    lilstevie89

    25 Mart 2011