class Solution {
public String solution(String new_id) {
String answer = new_id.toLowerCase();
1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
String 클래스의 toLowerCase() 메서드를 사용하면 모든 문자열이 소문자로 치환된다.
answer = answer.replaceAll("[^a-z0-9-_.]","");
2단계 newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다.
정규표현식을 사용하여 replaceAll을 하게 되면 해당 문자를 제외하고 모든 문자가 ""으로 치환된다.
괄호 안에 Hat표시(^)는 NOT이라는 의미이다.
answer = answer.replaceAll("[.]+", ".");
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
이 또한 정규표현식으로 해결한다.
정규 표현식에서 +의 의미는 []안에 있는 문자가 1개이상 혹은 더 있을 수 있다 라는 뜻이다.
정규 표현식에서 |의 의미는 OR의 의미와 같다.
answer = answer.replaceAll("^[.]|[.]$", "");
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
이 또한 정규표현식으로 해결한다.
[] 밖에서의 ^은 문자열의 시작이라는 말과 같다.
ex) (문자열의 시작) hi == "^hi"
반대로 $는 문자열의 마지막을 뜻한다.
ex) hi (문자열의 마지막) == "hi$"
if(answer.equals("")) answer = "a";
5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
if(answer.length() >= 16){
answer = answer.substring(0,15);
answer = answer.replaceAll("\\.$", "");
}
6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
마찬가지로 제거한 문자열의 끝부분에 .이 있다면 제거한다.
if(answer.length() <= 2){
String lastchar = answer.substring(answer.length() - 1);
for (int i = answer.length(); i < 3; i++){
answer = answer.concat(lastchar);
}
}
return answer;
}
}
7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.