Java — Pattern — Matcher.Gruppe()?

Also ich habe ein Dokument, und eine bestimmte n-Gramm-Ziel-string. Ich bin versucht zu finden, die Indizes alle vorkommen der Ziel-string.

final Pattern WORD_PATTERN = Pattern.compile("\\w+");
Matcher matcher = WORD_PATTERN.matcher("the lazy dog, jumps, the lazy dog.");

Also die Zeichenfolge "den faulen Hund springt, der faule Hund."

Sagen, mein Ziel-n-Gramm ist "die faulen". Ich wesentlichen 'iterate' durch die gesamte Zeichenfolge wie folgt, hinzufügen 'n' Worten zu einer verknüpften Liste, currentNGram. Wenn alle Wörter in currentNGram entsprechen die Ziel-n-Gramm-ich speichern Sie die index. Sonst, ich Entferne das erste element der verketteten Liste, und fügen Sie auf das nächste Wort in der Eingabe-string (zB. überprüfen Sie die folgenden aufeinander folgenden n-Gramm in Dokument).

while (matcher.find()) {
    while (currentNGram.size() < lengthOfTargetNTuple) { 
        currentNGram.add(matcher.group().toLowerCase());
            System.out.println(currentNGram.getLast());
    }
}

Also das ist alles schön und gut, aber mein Nächstes problem ist, dass ich zu 'Durchlaufen' durch das Dokument erneut, und finden Sie die Entfernung jedes n-Gramm zum nächsten Ziel-n-Gramm. So nehme ich die exakt gleichen Ansatz. Außer dieser Zeit, wenn ich initialisieren Sie den matcher, und führen Sie die Schleife wie folgt,

 while (matcher.find()) {
        while (currentGram.size() < lengthOfTargetNTuple) {
            currentGram.add(matcher.group().toLowerCase());
                    System.out.println(currentGram.printLast()) //Psuedocode
        }

druckt er das Wort "die" 7-mal statt Druck "" "faul" "Hund" "springt", etc. Allerdings

while (matcher.find()) {
        while (currentGram.size() < lengthOfTargetNTuple) {
            currentGram.add(matcher.group().toLowerCase());
        }
        System.out.println(matcher.group()); //Prints words in order, correctly
}

Warum ist das so? Wie kommen die matcher.Gruppe () - Methode aufrufen, ausdrucken Wörter in der richtigen Reihenfolge in das erste problem, aber nicht die zweite? Jede Richtung würde sehr geschätzt werden; ich weiß, das war ein langer post, sorry.

Dank!

InformationsquelleAutor Ryan Yu | 2012-09-15

Schreibe einen Kommentar