JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한사항
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
String[] arr = s.split(" ");
for(int i=0; i<arr.length; i++) {
arr[i] = arr[i].toLowerCase();
for(int j=0; j<arr[i].length(); j++) {
if(arr[i].charAt(j) >= 'a' && arr[i].charAt(j) <= 'z') {
arr[i] = Character.toUpperCase(arr[i].charAt(j)) + arr[i].substring(j+1);
break;
} else if(arr[i].charAt(j) >= '0' && arr[i].charAt(j) <= '9') {
arr[i] = arr[i];
break;
}
}
}
answer = String.join(" ", arr);
return answer;
}
}
하지만 실행 결과 테스트 8번 실패... 😂
8번 테스트를 왜 실패할까 찾아봤더니 s 문자열의 맨뒤 공백이 2개 이상일때도 생각해줘야했다.... 나는 공백으로 문자열을 자르고 조립하면서 맨 뒤 공백은 신경쓰지 않았다..
마지막에 나올 공백을 생각해서 코드를 다시 짜보자
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
String[] arr = s.split(" ");
for(int i = 0; i < arr.length; i++) {
// 문자열의 길이가 0이라면 공백 추가
if(arr[i].length() == 0) answer += " ";
else {
answer += arr[i].substring(0, 1).toUpperCase();
answer += arr[i].substring(1, arr[i].length()).toLowerCase();
answer += " ";
}
}
// 입력 받은 문자열의 맨 마지막이 " " 라면 바로 answer 반환
if(s.substring(s.length() -1, s.length()).equals(" ")) return answer;
// 맨 마지막 " " 제거하고 answer 반환
return answer.substring(0, answer.length() - 1);
}
}
먼저 공백으로 문자열을 잘라 배열을 만든 후 문자열의 길이가 0인 곳은 공백이니까 answer에 공백을 추가하도록 하였다.
그리고 첫문자는 대문자, 나머지는 소문자로 한뒤 answer에 추가하고 그 뒤 공백을 더 추가했다.
이렇게 반복문을 돈후 만약 입력 많은 문자열 s의 맨 마지막이 공백이였다면 그대로 answer을 return하고 만약 아니라면 마지막 공백을 제거해줘야한다.