프로그래머스 : 신규 아이디 추천

김아무개·2023년 4월 2일
0

프로그래머스

목록 보기
21/41

다른사람 코드 _ 프로그래머스 첫 번쨰

class Solution {
    public String solution(String new_id) {

        String s = new KAKAOID(new_id)
                .replaceToLowerCase()
                .filter()
                .toSingleDot()
                .noStartEndDot()
                .noBlank()
                .noGreaterThan16()
                .noLessThan2()
                .getResult();


        return s;
    }

    private class KAKAOID {
        private String s;

        KAKAOID(String s) {
            this.s = s;
        }

        private KAKAOID replaceToLowerCase() {
            s = s.toLowerCase();
            return this;
        }

        private KAKAOID filter() {
            s = s.replaceAll("[^a-z0-9._-]", "");
            return this;
        }

        private KAKAOID toSingleDot() {
            s = s.replaceAll("[.]{2,}", ".");
            return this;
        }

        private KAKAOID noStartEndDot() {
            s = s.replaceAll("^[.]|[.]$", "");
            return this;
        }

        private KAKAOID noBlank() {
            s = s.isEmpty() ? "a" : s;
            return this;
        }

        private KAKAOID noGreaterThan16() {
            if (s.length() >= 16) {
                s = s.substring(0, 15);
            }
            s = s.replaceAll("[.]$", "");
            return this;
        }

        private KAKAOID noLessThan2() {
            StringBuilder sBuilder = new StringBuilder(s);
            while (sBuilder.length() <= 2) {
                sBuilder.append(sBuilder.charAt(sBuilder.length() - 1));
            }
            s = sBuilder.toString();
            return this;
        }

        private String getResult() {
            return s;
        }
    }
}

클래스의 사용과 정규식의 다양한 사용방법을 배울 수 있는 코드였다!!

정규식 📝🤓

  1. 문자 2개 이상 "[.]{2,}"
        1-1. 문자 2개 : "[.]{2}"
        1-2. 문자 2개 이상 10개 이하: "[.]{2,10}"
  2. !로 시작 : "^[!]"
  3. !로 끝남 : "[!]$"

내 코드

머쓱;

class Solution {
    public String solution(String new_id) {
        // 1
        new_id = new_id.toLowerCase();
        
        // 2
        new_id = new_id.replaceAll("[^\\-_.a-z0-9]", "");
        
        // 3
        new_id = removeRangeDot(new_id);
        
        // 4
        new_id = removeFirstDot(new_id);
        new_id = removeLastDot(new_id);
        
        // 5
        if (new_id.length() == 0) new_id = "aaa";

        // 6
        if (new_id.length() > 15) {
            new_id = new_id.substring(0, 15);
            new_id = removeLastDot(new_id);
        }
        
        // 7
        while (new_id.length() < 3) {
            new_id += new_id.substring(new_id.length() - 1);
        }
        
        return new_id;
    }
    
    public String removeRangeDot(String id) {
        while (id.contains("..")) id = id.replace("..", ".");
        return id;
    }
    public String removeFirstDot(String id) {
        while (id.length() > 0 && id.charAt(0) == '.') id = id.substring(1);
        return id;
    }
    public String removeLastDot(String id) {
        while (id.length() > 0 && id.charAt(id.length() - 1) == '.') id = id.substring(0, id.length() - 1);
        return id;
    }
}
profile
Hello velog! 

0개의 댓글