Hola:
Ahí tienes dos problemas distintos.
Metes el nombre y apellidos completo en una sola cadena.
El primer problema es separar las palabras. Eso lo haces bien con StringTokenizer y usando como separador el espacio.
El otro problema es decidir qué es nombre, qué es apellido y si es nombre o apellido compuesto. Este problema es MUY complejo y si estás haciendo unas prácticas de algún tipo de curso o escuela, no creo que sea lo que te están pidiendo. De todas formas, si quieres tener eso en cuenta, tienes varias posiblidades simples:
- Pedir al usuario que meta "nombre apellido1 apellido2" en ese orden y no hay compuestos.
- Pedir al usuario que meta "nombre/apellido1/apellido2" en ese orden, separado por barras. Así sí puede haber apellidos compuestos (separados por espacios). En StirngTokenizer usarias de separador la /
- Pedir al usuario cualquier otro formato que se te ocurra y te facilite la tarea, por ejemplo comas y guiones y obligando a un orden.
nombre-compuesto, apellido-paterno-compuesto apellido-materno-compuesto
Sabes que todo lo que hay antes de la coma es nombre (compuesto o no) y despues de la coma, hay un espacio que separa apellido paterno y apellido materno. Si los apellidos son compuestos, llevan guion.
De esta forma lo arreglas igual con StringTokenizer. Primero separas por coma para obtener el nombre. El resto lo separas por espacios para tener los dos apellidos.
En fin, cualquier formato/separador que quieras y te arreglas con StringTokenizer.
Se bueno.