[프로그래머스] 신규 아이디 추천(JAVA)- 2021 KAKAO BLIND RECRUITMENT

GyeongEun Kim·2022년 5월 23일
0
post-custom-banner

문제

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

코드 (정규 표현식X)

import java.util.*;
class Solution {
    public String solution(String new_id) {
        StringBuilder sb = new StringBuilder();
        new_id= new_id.toLowerCase(); //1단계

        
        for (int i=0;i<new_id.length();i++) {
            Character c = new_id.charAt(i);
            if (c>='a' &&c<='z') sb.append(c.toString());
            else if(c>='0' && c<='9' ) sb.append(c.toString());
            else if (c=='-' || c=='_' ||c=='.') sb.append(c.toString());
        }
      
        new_id= sb.toString();  //2단계

        
        
        
        //3단계
        while (new_id.contains("..")) {
            new_id=new_id.replace("..",".");
        }
        
       
        if (new_id.startsWith("."))
            new_id= new_id.replaceFirst("."," ");
        if (new_id.endsWith("."))
             new_id= new_id.substring(0,new_id.length()-1);
        new_id=new_id.replaceAll(" ",""); //4단계

        
        
        if (new_id.equals(""))
            new_id="a"; //5단계
     
        
        if(new_id.length()>=16) {
            new_id = new_id.substring(0,15);
            if (new_id.endsWith(".")) {
                new_id = new_id.substring(0,14);
            }
        }//6단계
        
        if(new_id.length()<=2){
            Character last = new_id.charAt(new_id.length()-1);
            while(new_id.length()<3) {
                new_id=new_id+last.toString();
            }
        }//7단계
   
    
        return new_id;
    }
}

풀이

단계별로 차근차근 구현하면 되는 문제이다. 문자열을 다루는 방법을 잘 알면 풀 수 있다.
다만 정규표현식을 알면 더 쉽게 풀 수 있다. 정규표현식을 처음봐서 헷갈리는데 일단은 여기서 사용한 것만 제대로 알아놓아야겠다.

코드 (정규표현식 O)

new_id= new_id.replaceAll("[^a-z0-9_.-]","") ;//2단계
//a-z, 0-9, _, ., -가 아닌 문자열은 삭제
//[^abc] => abc가 포함되지 않은 문자열
new_id = new_id.replaceAll("^[.]|[.]$",""); //4단계
//맨앞이나 맨끝이 .이면 삭제
//^[abc] => abc로 시작하는 문자열/ [abc]$ => abc로 끝나는 문자열
profile
내가 보려고 쓰는 글
post-custom-banner

0개의 댓글