- 정규표현식과 조건문이 많이들어가는 문제이기 때문에 따로 클래스를 만들어 메소드에 조건들을 작성하여 해결하였다.
- 정규표현식의 공부가 필요하다는 것을 느낄 수 있는 문제였다.
class Solution {
public String solution(String new_id) {
String answer = new KakaoId(new_id)
.toLower()
.filterId()
.removeDot()
.startDotRemove()
.endDotRemove()
.noBlank()
.idGreaterThan16()
.endDotRemove()
.idLessThan()
.getResult();
return answer;
}
public static class KakaoId {
String id;
public KakaoId(String id) {
this.id = id;
}
public KakaoId toLower() {
this.id = this.id.toLowerCase();
return this;
}
public KakaoId filterId() {
this.id = this.id.replaceAll("[^a-z0-9._-]","");
return this;
}
public KakaoId removeDot() {
this.id = this.id.replaceAll("[.]{2,}", ".");
return this;
}
public KakaoId noBlank() {
if(this.id.isBlank()) this.id = "a";
return this;
}
public KakaoId startDotRemove() {
if(this.id.startsWith(".")) {
this.id = this.id.substring(1, this.id.length());
}
return this;
}
public KakaoId endDotRemove() {
if(this.id.endsWith(".")) {
this.id = this.id.substring(0, this.id.length() - 1);
}
return this;
}
public KakaoId idGreaterThan16() {
if(this.id.length() >= 16) {
this.id = this.id.substring(0,15);
}
return this;
}
public KakaoId idLessThan() {
if (this.id.length() <= 2) {
while (this.id.length() < 3) {
this.id += this.id.charAt(this.id.length() - 1);
}
}
return this;
}
public String getResult() {
return this.id;
}
}
}