https://school.programmers.co.kr/learn/courses/30/lessons/12951
public class Solution {
public String solution(String s) {
s = s.toLowerCase();
String answer = "";
String[] words = s.split(" ");
for (int i = 0; i < words.length; i++) {
String word = words[i];
answer += word.substring(0, 1).toUpperCase();
answer += word.substring(1, word.length());
if (i != words.length - 1) {
answer += " ";
}
}
return answer;
}
}
런타임 에러 발생
44.0/100
프로그래머스에서 제공한 기본 테스트 케이스는 통과했으나 제출하니 런타임 에러가 엄청나게 발생했다.
이유가 뭔가 했더니 공백이 연달아 2개가 나오는 경우, 앞뒤로 공백이 존재하는 경우에 대한 테스트 케이스에서 실패 했다.
1번에 대한 해결을 위해서 split(" ", -1)
메소드를 통해 뒤 공백에 대한 문제는 해결하였다.
하지만 결국 split(" ")
을 사용하면 중간에 공백이 2번 이상 들어오는 경우 때문에 문제가 생길 수 밖에 없었다.
substring()
사용하면서 에러가 발생하기 때문공백 뒤는 무조건 대문자다 라는 결론으로 아래와 같이 풀이하고 통과함.
public class Solution {
public String solution(String s) {
s = s.toLowerCase();
String answer = "";
String[] words = s.split("");
for (int i = 0; i < words.length; i++) {
if (i == 0 || " ".equals(words[i-1])) {
answer += words[i].toUpperCase();
}
else
{
answer += words[i];
}
}
return answer;
}
}
Split 특징
1. split()
은 맨 앞과 맨 뒤에 있는 구분자에 대해서는 구분하지 않는다.
2. 구분자가 연속되었다면 1번만 구분한다.
flag 통해서 정리된 코드 보니 더 간결하고 좋아보였다.