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

Elmo·2022년 8월 21일
0
post-custom-banner

🔔 신규 아이디 추천

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

String 관련 함수

  • substring(시작 인덱스, 포함할 인덱스 + 1)
    문자열의 인덱스는 0~문자열의 길이 -1 이다
    예) 0~3번까지 문자열을 자르고 싶으면 substring(0,4)
  • replace(바꿔야되는 문자열 , 변경 후 문자열)
  • replaceAll(바꿔야되는 문자열, 변경 후 문자열)
  • 대,소문자 변경 : toUpperCase() , toLowerCase()

🔔 replacereplcaeAll 의 차이점(짱 중요!)
String replace(CharSequnce target, CharSequence replacement)
String replaceAll(String regex, String replacement)

  • replace는 보다시피 charSequnce로 받지만 replaceAll정규식을 받는다.
  • 즉, replace는 특수문자를 문자열로 인식하지만 replaceAll은 정규식으로 인식한다. 정규식에서 .은 모든 문자를 의미한다.
  • replaceAll 정규식으로 사용할때:
    replaceAll("[해당 문자들을]","이 문자로 변환함")
    replaceAll("[^해당 문자들을 제외하고]","이 문자로 변환함")

replaceAll과 replace의 차이점을 생각하지 못했다. 이로 인해 잘못된 값이 나오는데 이유를 몰라서 한참 헤맸다..부들부들

🔑 java 풀이

import java.util.*;
class Solution {
    public String solution(String new_id) {
        //1단계
        String answer = new_id.toLowerCase();
        //2단계
        answer = answer.replaceAll("[^-._0-9a-z]","");
        //3단계
        while(answer.contains("..")){
            answer=answer.replace("..", ".");
        }
        //4단계
        if(answer.length()>0){
            if(answer.charAt(0)=='.')
                answer=answer.substring(1,answer.length());
        }
        if(answer.length()>0){
            if(answer.charAt(answer.length()-1)=='.')
                answer=answer.substring(0,answer.length()-1);
        }
        //5단계
        if(answer.length()==0)
            answer+='a';
        //6단계
        if(answer.length()>=16){
            answer=answer.substring(0,15);
            if(answer.charAt(answer.length()-1)=='.')
                answer=answer.substring(0,14);
        }
        //7단계
        if(answer.length()<=2){
            while(answer.length()<3){
                answer+=answer.charAt(answer.length()-1);
            }
        }
        return answer;
    }
}

정규식을 단계마다 사용해서 코드길이를 확 줄이는 것도 가능하다.
근데 그냥 내가 푸는 방식으로 풀어보고 싶었다.

코딩 특 : 사소한 실수 하나로 시간 낭비할때마다 현타옴 ㅎ

profile
엘모는 즐거워
post-custom-banner

0개의 댓글