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
여기 정리가 너무 야물딱지다.