프로그래머스

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

yanJuicy 2022. 12. 6. 22:36
반응형

문제

링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

다음 정규 표현식을 이용해 “..” 을 찾을 수 있다. "[.]{2,}”
문제의 조건에 맞게 구현을 하면 된다.

코드

java

public class Solution {

    public String solution(String new_id) {
        new_id = toLowerId(new_id);
        new_id = removeSpecialChar(new_id);
        new_id = removeContinueDot(new_id);
        new_id = removeEdgeDot(new_id);
        new_id = ifEmptyThenA(new_id);
        new_id = ifLongerThan16(new_id);
        new_id = ifShorterThan2(new_id);
        return new_id;
    }

    private String toLowerId(String id) {
        return id.toLowerCase();
    }

    private String removeSpecialChar(String id) {
        StringBuilder sb = new StringBuilder();
        char[] chars = id.toCharArray();
        for (char c : chars) {
            if (Character.isAlphabetic(c) || Character.isDigit(c) || c == '-' || c == '_'
                    || c == '.') {
                sb.append(c);
            }
        }
        return sb.toString();
    }

    private String removeContinueDot(String id) {
        return id.replaceAll("[.]{2,}", ".");
    }

    private String removeEdgeDot(String id) {
        StringBuilder sb = new StringBuilder(id);

        while (sb.indexOf(".") == 0) {
            sb.deleteCharAt(0);
        }
        while (sb.length() > 0 && sb.lastIndexOf(".") == sb.length() - 1) {
            sb.deleteCharAt(sb.length() - 1);
        }

        return sb.toString();
    }

    private String ifEmptyThenA(String id) {
        if (id.equals("")) {
            return "a";
        }
        return id;
    }


    private String ifLongerThan16(String id) {
        StringBuilder sb = new StringBuilder(id);

        if (sb.length() >= 16) {
            sb = new StringBuilder(sb.substring(0, 15));
        }
        while (sb.length() > 0 && sb.lastIndexOf(".") == sb.length() - 1) {
            sb.deleteCharAt(sb.length() - 1);
        }

        return sb.toString();
    }

    private String ifShorterThan2(String id) {
        StringBuilder sb = new StringBuilder(id);
        while (sb.length() <= 2) {
            sb.append(sb.charAt(sb.length() - 1));
        }
        return sb.toString();
    }
}
반응형