문자열 정규표현식

박진은·2023년 7월 29일
0

코테

목록 보기
39/44

https://school.programmers.co.kr/tryouts/71860/challenges

class Solution {
//     아이디의 길이는 3자 이상 15자 이하여야 합니다.
// 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다.
// 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.
    public String solution(String new_id) {
        String answer = "";
        new_id = new_id.toLowerCase();
        new_id = new_id.replaceAll("[^a-z0-9-_.]","");//영어, 숫자 , -_. 을 제외한 모든문자 "" 로 변경
        new_id = new_id.replaceAll("\\.{1,}",".");//'.' 문자가 하나이상 나오는 문자열을 '.' 로 변경
        new_id = new_id.replaceAll("^\\.","");// '\\.' 로 시작하는 문자열 공백으로 변경 이 때 특수문자을 사용하기 위해서는 \\ 가 필요함
        new_id = new_id.replaceAll("\\.$","");//\\. 로 끝나는 문자를 공백으로 변경
        if(new_id.length() == 0){
            new_id = new_id + "a";
        }
        
        if(new_id.length() >= 16){
            new_id = new_id.substring(0,15);// 문자열 자르기
            new_id = new_id.replaceAll("^\\.","");
            new_id = new_id.replaceAll("\\.$","");
        }
        
        String last = Character.toString(new_id.charAt(new_id.length()-1));
        while(new_id.length() < 3){
            new_id = new_id + last;//새로운 문자열 붙이기
        }
        return new_id;
    }
}

위 문제는 정규표현식을 이용하면 훨씬 쉽게 간단하게 풀이할 수 있다.

 new_id = new_id.toLowerCase();
        new_id = new_id.replaceAll("[^a-z0-9-_.]","");//영어, 숫자 , -_. 을 제외한 모든문자 "" 로 변경
        new_id = new_id.replaceAll("\\.{1,}",".");//'.' 문자가 하나이상 나오는 문자열을 '.' 로 변경
        new_id = new_id.replaceAll("^\\.","");// '\\.' 로 시작하는 문자열 공백으로 변경 이 때 특수문자을 사용하기 위해서는 \\ 가 필요함
        new_id = new_id.replaceAll("\\.$","");//\\. 로 끝나는 문자를 공백으로 변경

대표적인 정규표현

이 부분을 중점 적으로 학습하기 위해서 노력해야겠다
'[^]' - 대괄호 안에 존재하는 문자에 대해서 제외
"\\\.{1,}" - 마침표가 하나이상
"^\\."- 마침표로 시작하는 경우
"\\.$ " ㅁ- 마침표로 끝나는 경우 이런 기본적인 정규표현식은 아는게 좋은것 같다.

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%A0%95%EA%B7%9C%EC%8B%9DRegular-Expression-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC
여기 정리가 너무 야물딱지다.

profile
코딩

0개의 댓글