https://school.programmers.co.kr/learn/courses/30/lessons/12951

class Solution {
    public String solution(String s) {
        s = s.toLowerCase();
        
        String[] tokens = s.split(" ", -1);
        //tokens의 첫 문자가 문자라면 uppercase로 변경
        for (int i=0; i<tokens.length; i++) {
            if (!tokens[i].isEmpty()) {
                tokens[i] = Character.toUpperCase(tokens[i].charAt(0)) + tokens[i].substring(1);
            }
        }
        //tokens를 공백을 사용해 합친 후 answer로 리턴
        String answer = String.join(" ", tokens);
        return answer;
    }
}

기본

java.lang.String의 String.toLowerCase()를 사용하면 깔끔하게 소문자 처리가 가능하다.

String.split(” “, -1) 와 같이, 두번째 인자는 limit 인자인데, 0 보다 작으면 빈 문자열까지 전부 살린다. 문제의 조건을 보면 공백문자가 연속해서 나올 수 있다고 하기에, limit을 0으로 하지 않고 음수인 -1로 하는 것이 중요하다.

if (!tokens[i].isEmpty()) 가 없으면 런타임 에러가 난다. String.charAt(0)에서 발생하는 에러이다.

한 글자 토큰의 경우, tokens[i].substring(1)이 “”를 반환한다. 에러가 없다.