[Programmers][Java] 신규아이디 추천

HyeBin, Park·2021년 4월 29일
0

Programmers

목록 보기
1/26
post-thumbnail

https://programmers.co.kr/learn/courses/30/lessons/72410

📒 문제

📒 규칙

💩 코드


class Solution {
    public String solution(String new_id) {
        
       String id = new_id.toLowerCase(); // 1. 소문자 -> 대문자
        String result = id.replaceAll("[^0-9a-z_.-]", ""); //2. 숫자, 영어, '-','_','.' 를 제외하고 다 제거
        id = result.replaceAll("[.]+", "."); // 3. ..이 반복할 경우 . 로 변경
        StringBuilder sb = new StringBuilder(id);

        if (sb.length() > 0 && sb.charAt(0) == '.') sb.deleteCharAt(0); // 4. 처음의 '.' 제거
        if (sb.length() > 2 && sb.charAt(sb.length() - 1) == '.') sb.deleteCharAt(sb.length() - 1); //4. 끝의 '.' 제거
        if (sb.length() == 0) sb.append("aaa"); // 5. 빈문자열은 "aaa"로 변경
        // 6. 문자열의 길이가 16자 이상일 경우 15번째이후로 제거
        if (sb.length() >= 16) { 
            sb.setLength(15);
            if (sb.charAt(14) == '.') sb.deleteCharAt(14); // 제거한 후 마지막 문자가 '.' 경우 제거
        } 
        // 7. 문자열의 길이가 2 이하인 경우 끝문자를 반복하여 3으로 만들어준다. 
        else if (sb.length() < 3) {
            if (sb.length() == 2) sb.append(sb.charAt(sb.length() - 1));
            else {
                sb.append(sb.charAt(sb.length() - 1));
                sb.append(sb.charAt(sb.length() - 1));
            }
        }
        String answer = sb.toString();
        return answer;
    }
}

👉 정규식을 사용하긴했지만, 1번째와 2번째 규칙이외에 활용하지 못했다.
문제해결만을 위한 코딩을 한 것 같다.


🌻 수정한 코드

class Solution {
   public String solution(String new_id) {		
   
       String id = new_id.toLowerCase(); // 1. 대문자 -> 소문자
		
       id = id.replaceAll("[^0-9a-z_.-]", ""); // 2. 영어,숫자,'-','_''.' 빼고 제거
       id = id.replaceAll("[.]+", "."); // 3. '.' 연속될 경우 '.'로 변경
       id = id.replaceAll("^[.]|[.]$",""); // 4. 처음과 끝의 '.' 제거

       if(id.isEmpty()) id = "aaa"; // 5. 빈문자열일경우 aaa 로 변경
       
       // 6. 길이가 16자 이상 -> 15번째까지만
       if(id.length()>=16){
           id = id.substring(0,15);
           id = id.replaceAll("[.]$","");
       }
       
       //7. 길이가 2자 이하 -> 끝문자 반복 (길이 3까지) 
       if(id.length()<=2){
           while(id.length()<3){
               id += id.charAt(id.length()-1);
           }
       }
       
       String answer = id;
       return answer;

💡 정리하기

👉 다른 분들이 올려주신 코드를 보며 정규식 표현에 대해 공부를 할 수 있었다. 다른 규칙에도 정규식을 활용할 수 있었다. 굳이 StringBuilder를 사용하지 않고, 정규식을 활용하면서 훨씬 간결한 코드를 얻을 수 있었다.

0개의 댓글