Matcher nie znajduje pokrywających się słów?

Próbuję wziąć ciąg:

String s = "This is a String!";

I zwróć wszystkie pary 2-wyrazowe w tym ciągu. Mianowicie:

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

Ale w tej chwili wszystko, co mogę zrobić, to wrócić:

{"this is", "a String"}

Jak mogę zdefiniować moją pętlę while tak, że mogę wyjaśnić ten brak nakładających się słów? Mój kod jest następujący: (Naprawdę, byłbym szczęśliwy, gdyby zwrócił tylko int reprezentujący ile podzbiorów napisów znalazł ...)

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

Dziękuje wszystkim.

questionAnswers(4)

yourAnswerToTheQuestion