[프로그래머스] 신규 아이디 추천 -Java

hyeokjin·2022년 2월 19일
0

프로그래머스에 문자열 관련 좋은 문제가 있었다.
문자열을 가공 하는 데 있어서, 정규표현식을 알아두면 편하다.

주어진 문제를 보면, 아이디 생성시 아래의 7단계를 거쳐 규칙의 맞는 아이디를 생성하게 된다

1단계 newid의 모든 대문자를 대응되는 소문자로 치환합니다.
2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(
), 마침표(.)를 제외한 모든 문자를 제거합니다.
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.

아래의 정규표현식을 이용하여 구현 할 수 있다.

class Solution {
    public String solution(String new_id) {
        String str = new_id;
        //1
        // 소문자 변환
		str = str.toLowerCase();
        
        //2
		// * : 앞문자가 없을 수도, 무한정 많을수도 있음
		// ^ : 영어 소문자, 숫자, -  _  .  문자 제외한 모든 문자 제거
        // \\ : 특정 문자를 뽑아 매칭시킬때 사용
		str = str.replaceAll("[^a-z0-9\\-_.]*","");

        //3
		// 횟수 또는 범위를 나타내는 {2} 2회이상 연속되면 . 으로 치환
		str = str.replaceAll("\\.{2,}", ".");
        
        //4
		// ^ : 문자시작, | : 이거나 , [.]$ : 문자열 끝이  
        // ([.] 첫문자나 끝이 . 으로 끝나면 제거)
		str = str.replaceAll("^[.]|[.]$", "");
            
        //5
        if("".equals(str)) {
        	str = "a";
        }
         
        //6
        // 문자길이는 15자 까지며, 제거 후 마침표가 양 끝에 있으면 제거
        if(str.length() > 15) {
        	str = str.substring(0 , 15);
            str = str.replaceAll("^[.]|[.]$", "");
        }
        
        //7
        // 길이가 2자 이하면, 마지막 문자를 붙여서 길이가 3이 될 때까지 반복
        if(str.length() < 3) {
        	while(str.length() < 3) {
        		//str += str.substring(str.length()-1);
        		str = str.concat(str.substring(str.length()-1));
        	}
        }

        return str;
    }
}
profile
노옵스를향해

0개의 댓글