所以我有一個文檔和一個指定的n-gram目標字符串。我試圖找到所有出現的目標字符串的索引。Java - 模式 - Matcher.group()?
final Pattern WORD_PATTERN = Pattern.compile("\\w+");
Matcher matcher = WORD_PATTERN.matcher("the lazy dog, jumps, the lazy dog.");
所以字符串是「懶狗,跳,懶狗」。
說我的目標n-gram是「懶惰的」。我基本上按以下方式對整個字符串進行「迭代」,在鏈表中添加'n'個單詞currentNGram。如果currentNGram中的所有單詞都與目標n-gram匹配,則保存索引。否則,我刪除鏈表的第一個元素,並在輸入字符串中的下一個單詞上附加(例如,檢查文檔中的下一個連續的n元組)。
while (matcher.find()) {
while (currentNGram.size() < lengthOfTargetNTuple) {
currentNGram.add(matcher.group().toLowerCase());
System.out.println(currentNGram.getLast());
}
}
所以這是所有罰款和花花公子,但我的下一個問題是,我要通過文件「迭代」一遍,找到最近的目標正克每n元的距離。所以我採用完全相同的方法。只是這一次,當我重新初始化匹配,並運行循環如下,
while (matcher.find()) {
while (currentGram.size() < lengthOfTargetNTuple) {
currentGram.add(matcher.group().toLowerCase());
System.out.println(currentGram.printLast()) // Psuedocode
}
它打印字「的」 7倍,而不是印刷「的」,「懶」,「狗」,「跳躍」等但是,
while (matcher.find()) {
while (currentGram.size() < lengthOfTargetNTuple) {
currentGram.add(matcher.group().toLowerCase());
}
System.out.println(matcher.group()); // Prints words in order, correctly
}
這是爲什麼? matcher.group()方法調用在第一個問題中按正確順序打印出單詞,但不是第二個單詞?任何方向將不勝感激;我知道這是一個很長的帖子,對不起。
謝謝!