Tamanho de Palavras em String

Preciso informar a quantidade de textos a ingressar e contar a quantidade de caracteres de cada palavra em uma string e separar por espaço.
Exemplo:
Entrada:
Ola tudo bem
e ai como foi seu dia
Saida:
3 4 3
1 2 4 3 3 3

Consegui contar somente o tamanho de tudo:

    Scanner sc = new Scanner(System.in);
    
    System.out.println("Quantas frases deseja digitar: ");
    int num = sc.nextInt();
   
    
    for (int i = 0; i < num; i++) 
    {
        System.out.println("");
        System.out.println("Digite a frase: ");
        String frase = sc.nextLine();
        
        System.out.println("Quantidade de caracteres por palavra: " + frase.length());
    }

Na verdade o texto deveria muda-lo para Quantidade de caracteres (incluindo espaços) por frase, mas enfim…

Já sabe usar arrays?

Dentro do for, use o método split indicando o espaço como delimitador/separador…

...
String frase = sc.nextLine();
String[] palavras = frase.split(" ");

System.out.print("Quantidade de caracteres por palavra: ");
for (int j = 0; j < palavras.length; j++) {
    System.out.print(palavras[j].length() + " ");
}
System.out.println();
...
1 curtida

Entendi, funcionou, muito obrigado. Mas ao entrar no primeiro for ele pega a primeira frase como zero e só a partir da segunda consigo digitar o que realmente quero, caso eu digite que quero apenas uma frase a resposta é zero e finaliza sem ter digitado nada, sabe qual seria o problema ?

Isso acontece por causa do sc.nextInt()… o java tem um bug nesse método, quando você digita um número fica um buffer (pesquise mais a respeito) justamente com um \n (caractere de nova linha) armazenado no buffer, quando se usa outro método o java “puxa” do buffer antes de pedir do usuário, um jeito de corrigir isso pode ser assim…

int num = sc.nextInt();
sc.nexLine();
...

Isso é gambiarra, mas funciona :joy:, com isso o buffer usa o \n nesse nextLine “vazio”, os próximos serão chamados corretamente. O jeito formal e “elegante” de corrigir isso também pode ser assim…

int num = Integer.paserInt(sc.nextLine());
...

Isso já ignora o buffer e armazena o int convertido pelo método… vai pesquisando é assim que se aprende e bons estudos!