在匹配文本中查找单词索引

Find index of words in matched text

我正在使用 Matcher 在句子中查找短语,但我还想在找到的短语中查找每个单词的索引。我的意思是想象一个句子被每个词索引:

This is my wonderful sentence
0    1  2  3         4

它们将按上述方式编入索引。但是,我只需要找到短语本身,而不是句子中其他地方的短语中的单个单词。

I know this sentence repeats but you know that it doesn't
0 1    2    3        4       5   6   7    8    9  10

如果我匹配短语 but you know 然后我想获得匹配的单词的索引,但我不想 return 为单词 know 附近的索引 1一开始,我只想 return 5、6 和 7。我想不出有什么好的方法来匹配这个短语和这个代码:

String line = "I know this sentence repeats but you know that it doesn't";

final Matcher match = Pattern.compile("but you know").matcher(line);
if (match.find()) 
    System.out.println(match.group(0));

明确地说,我想要这个匹配短语的索引号 5、6 和 7,在数组或其他东西中。

这是一种方法。

  • 找到短语的索引并获取到该点为止的句子的子字符串。
  • 然后使用拆分对子字符串中的单词进行计数。数组的长度将是短语第一个单词的起始索引,除非 indexOfPhrase == 0。那么它将是0.
  • 然后拆分短语得到每个词,递增初始子串的前一个词索引。
String sentence =
        "I know this sentence repeats but you know that it doesn't";

String phrase = "but you know";

int indexOfPhrase = sentence.indexOf(phrase);

String[] temp = sentence.substring(0, indexOfPhrase).trim().split("\s+");
int firstIndex = indexOfPhrase == 0 ? 0 : temp.length;

int start = firstIndex;
for (String word : phrase.split("\s+")) {
    System.out.printf("%8s : %d%n", word,start++);
}

版画

     but : 5
     you : 6
    know : 7

要将值放入数组中,您可以执行以下操作:

int[] indices = new int[phrase.split("\s+").length]; 
Arrays.setAll(indices, i-> firstIndex+i);