Como criar uma lista de listas com Strings?

Gostaria de saber como faço para dividir um texto em [,.:;-?!] e jogar cada divisão dessa dentro de uma lista e depois dividir os elementos da lista em palavras.

String texto = “João é muito legal e gosta muito de dormir. Sendo assim, ele não acorda muito sedo, sua mãe fica sem paciência de tanto tentar acorda-lo”;
Ficaria assim:

["João é muito legal e gosta muito de dormir", "Sendo assim, ele não acorda muito sedo", "sua mãe fica sem paciência de tanto tentar acorda-lo"]

Depois dividir por espaço:

[["João", "é", "muito", "legal", "e", "gosta", "muito", "de", "dormir"], ["Sendo", "assim", "ele", "não", "acorda" "muito", cedo"] ["sua", "mãe", "fica", "sem", "paciência", "de", "tanto", "tentar", "acorda-lo"]]

Ou seja, gostaria de criar uma lista de listas.

Primeiro: é cedo e não sedo
Segundo, você precisa ter uma regra clara para poder “quebrar” a String. Note que você dividiu a frase inicial em três partes e cada parte é finalizada de uma maneira (a primeira com ponto, a segunda com vírgula e a terceira no fim da String).
Se conseguir determinar um padrão (seja ponto, ponto e vírgula ou algum caractere diferente, como |), aí você começa a resolver teu problema.