Совпадение не находит перекрывающихся слов?

Я пытаюсь взять строку:

String s = "This is a String!";

И вернуть все пары из двух слов в этой строке. А именно:

{"this is", "is a", "a String"}

Но сейчас все, что я могу сделать, это вернуться:

{"this is", "a String"}

Как я могу определить свой цикл while так, чтобы я мог объяснить это отсутствие перекрывающихся слов? Мой код выглядит следующим образом: (На самом деле, я был бы доволен, просто возвращая int, представляющий, сколько найденных им строковых подмножеств ...)

int count = 0;
while(matcher.find()) {
    count += 1;
}

Спасибо всем.

Ответы на вопрос(4)

Ваш ответ на вопрос