💡Problem Solving/Programmers

[프로그래머스] JadenCase 문자열 만들기 (Java)

gom20 2021. 10. 23. 00:05

#문제

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

 

코딩테스트 연습 - JadenCase 문자열 만들기

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건

programmers.co.kr


#풀이

단어가 공백으로 구분되어 주어지는데 공백의 칸 수가 들쑥 날쑥 할 수 있다. 

split(" ")으로 쪼갰다가 틀린 케이스가 존재해서  정규식으로 뒤에 공백까지 포함해서 단어를 나눠서 처리하였다. 

마지막 단어 뒤에는 공백이 없거나 또는 공백이 있을 수 있다. 공백이 있다면 while문에서 처리 될 것이고, 

공백이 없다면 따로 추가 처리하도록 코드를 구현하였다.

지금와서 생각해보니 split 함수에서도 정규표현식을 이용해 문자열을 분리할 수 있었다. 

 

#소스코드

import java.util.*;
import java.io.*;
import java.util.regex.*;

class Solution {
    public String solution(String s) {
        int startIdx = 0, endIdx = 0;
        String word = "";
        StringBuilder sb = new StringBuilder();
          
        Pattern p = Pattern.compile("[A-Za-z0-9]+\\s+");
        Matcher m = p.matcher(s);
        while(m.find()){
            startIdx = m.start();
            endIdx = m.end();
            word = s.substring(startIdx, endIdx);
            sb.append(String.valueOf(word.charAt(0)).toUpperCase());
            sb.append(word.substring(1).toLowerCase());
        }
        if(endIdx < s.length()){
            word = s.substring(endIdx);
            sb.append(String.valueOf(word.charAt(0)).toUpperCase());
            sb.append(word.substring(1).toLowerCase());        
        }
       
        return sb.toString();
    }
}