class Solution {
public String solution(String new_id) {
String answer = new_id.toLowerCase(); // 1단계
answer = answer.replaceAll("[^-_.a-z0-9]", ""); // 2단계
answer = answer.replaceAll("[.]{2,}", "."); // 3단계
answer = answer.replaceAll("^[.]|[.]$", ""); // 4단계
if (answer.equals("")) { // 5단계
answer += "a";
}
if (answer.length() >= 16) { // 6단계
answer = answer.substring(0, 15);
answer = answer.replaceAll("[.]$","");
}
if (answer.length() <= 2) { // 7단계
while (answer.length() < 3) {
answer += answer.charAt(answer.length()-1);
}
}
return answer;
}
}
다른풀이를 찾던중 정규식으로 푼 답이있었다. 사실 이방법으로 풀수있다고는 생각도 못했다.
풀이를 하면서 기억하려고 가져왔습니다.
풀이:
정규식을 사용하기 위해서는 replace 가 아닌 replaceAll()을 사용해야 활용하기 쉽습니다.
정규식을 사용하면 간단하게 바꿀수 있지만 그만큼 가독성이 떨어진다고 합니다.
1단계 소문자로 변경
2단계 []안에있는 것을 찾는 것 그러나 ^이 붙으면 아닌 것들 찾아서 변경
3단계 []{2}이면 []안에 것 2번반복된 것 찾기 이기만
{2,}이거면 2 이상인 것 찾기
4단계[] 앞에 ^ 붙으면 맨앞 ,뒤에 $ 붙으면 맨뒤
5단계 공백일때 a 추가
6단계 [.]이 맨뒤일때 공백으로 변경
7단계 글자수 2이하일 때 맨뒷글자 반복