Este é um código de exemplo para uma simples validação de nome com sistema de formatação. Ele remove os espaços laterais da String, a transforma em um array utilizando o método split(" "), e depois itera sobre esse array, juntando novamente cada elemento com a primeira letra em maiúscula (usando charAt(0)) e o restante em minúsculas com substring. Cada palavra é separada por um espaço " ", e no final, a String formatada é retornada.
Código que fiz:
package com.github.rickmvi.challenge07;
import com.github.rickmvi.jtoolbox.console.Out;
import com.github.rickmvi.jtoolbox.console.utils.ScannerUtils;
import com.github.rickmvi.jtoolbox.control.While;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.atomic.AtomicReference;
public class ValidName {
    public static void main(String[] args) {
        ScannerUtils.init();
        Out.print("Enter your name: ");
        AtomicReference<String> name = new AtomicReference<>(ScannerUtils.nextLine());
        if (name.get().isEmpty()) return;
        While.whileTrue(
                () -> name.get().length() < 3,
                () -> {
            Out.print("Your name is too short, please try again: ");
            name.set(ScannerUtils.nextLine());
        });
        ScannerUtils.close();
        Out.printFormatted("Your name is: {}", formatString(name.get()));
    }
    @Contract(pure = true)
    private static @NotNull String formatString(String str) {
        if (str == null || str.isEmpty()) return "";
        String args1 = str.trim();
        String[] args2 = args1.split(" ");
        StringBuilder args3 = new StringBuilder();
        
        for (String s : args2) {
            if (s.isEmpty()) continue;
            args3.append(Character.toUpperCase(s.charAt(0)))
                 .append(s.substring(1).toLowerCase().trim())
                 .append(" ");
        }
        return args3.toString().trim();
    }
}
Imagem do código:
Sainda no console:
 
             
            