Fera, vc ta usando a classe Scanner pra ‘tokenizar’ essa string. O melhor jeito de fazer isso é usando a classe StringTokenizer, que permite umas configurações melhores. Mas assim tbm funciona só q o separador é o espaco ’ '.
Pra entender mais ou menos como os métodos next() e hasNext() funcionam, imagina um cursor antes do D da string “Danilo Mendes”. hasNext() diz se existe em próximo ‘token’, No começo existe (Danilo). E quando a gente usa o método next() ele retorna esse token (Danilo) e coloca o crusor antes do M, e assim por diante.
Agora voltando pro seu caso, no primeiro while para cada token que ele encontrar ele vai adicionar um “s” na String hits.
No segundo while ele pega por tipos. Repara a string arg. Ela tem um inteiro, um boolean, outro inteiro e uma string. E nesse while ele usa os métodos hasInt e hasBoolean que funcionando mais ou menos igual ao hasNext(). A diferença que além de ver se tem um próximo, ele vê se é do tipo que vc precisa. Daí seguindo o while se ele achar um int ele adiciona ‘i’ na string, se ele achar um boolean adiciona ‘b’ e se ele achar qualquer coisa diferente disso ele coloca um ‘s2’ na string.
Blza, campeão?