[프로그래머스] JadenCase 문자열 만들기 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/12951
입력 : String s (1 ≤ s 문자열의 길이 ≤ 200, strings 원소는 1 이상, 100 이하인 문자열)
출력 : s를 JadenCase로 바꾼 문자열
O(n)
구현
split(" ")만 사용해서 테스트 케이스를 통과하지 못했고, 단어가 비어있을 때의 예외를 처리하지 않아 시간이 초과됐다.
split(" ", -1)을 사용해 공백을 포함해 모든 문자열을 보존하도록 했고, isEmpty()를 사용해 단어가 안비었을 때만 처리하도록 했다.
String s = "a b c";
// limit > 0
String[] result1 = s.split(" ", 2);
System.out.println(Arrays.toString(result1)); // [a, b c]
// limit == 0
String[] result2 = s.split(" ", 0);
System.out.println(Arrays.toString(result2)); // [a, b, c]
// limit < 0
String[] result3 = s.split(" ", -1);
System.out.println(Arrays.toString(result3)); // [a, b, , c]
split 메서드는 두 번째 인자로 limit 값을 받는데, 이 값이 양수 / 0 / 음수에 따라 동작이 다르다.
양수 값 (> 0): 배열의 길이가 최대 limit 개가 되도록 문자열을 나눈다. 즉, split 메서드는 최대 limit - 1 개의 구분자를 사용하여 문자열을 나누고, 나머지 문자열은 마지막 요소로 반환한다.
0 값: 구분자에 의해 분할된 모든 문자열을 반환하되, 끝에 위치한 빈 문자열은 무시한다.
음수 값 (< 0): 구분자에 의해 분할된 모든 문자열을 반환하며, 끝에 위치한 빈 문자열도 포함한다.
구현
import java.util.*;
class Solution {
public String solution(String s) {
String[] arr = s.split(" ", -1);
// -1 인자를 추가하여 공백을 포함한 원본 문자열 보존
StringBuilder sb = new StringBuilder();
for(int i=0; i<arr.length; i++) {
if (!arr[i].isEmpty()) {
char char1 = arr[i].charAt(0);
char1 = Character.toUpperCase(char1); //첫 글자 대문자
arr[i] = char1 + arr[i].substring(1).toLowerCase(); //나머지 글자 소문자
} //단어가 안비었을때만 처리
sb.append(arr[i]);
if (i != arr.length-1) {
sb.append(" ");
} //마지막 단어가 아니면 공백 추가
}
return sb.toString();
}
}