문제
코드 (정규 표현식X)
import java.util.*;
class Solution {
public String solution(String new_id) {
StringBuilder sb = new StringBuilder();
new_id= new_id.toLowerCase(); //1단계
for (int i=0;i<new_id.length();i++) {
Character c = new_id.charAt(i);
if (c>='a' &&c<='z') sb.append(c.toString());
else if(c>='0' && c<='9' ) sb.append(c.toString());
else if (c=='-' || c=='_' ||c=='.') sb.append(c.toString());
}
new_id= sb.toString(); //2단계
//3단계
while (new_id.contains("..")) {
new_id=new_id.replace("..",".");
}
if (new_id.startsWith("."))
new_id= new_id.replaceFirst("."," ");
if (new_id.endsWith("."))
new_id= new_id.substring(0,new_id.length()-1);
new_id=new_id.replaceAll(" ",""); //4단계
if (new_id.equals(""))
new_id="a"; //5단계
if(new_id.length()>=16) {
new_id = new_id.substring(0,15);
if (new_id.endsWith(".")) {
new_id = new_id.substring(0,14);
}
}//6단계
if(new_id.length()<=2){
Character last = new_id.charAt(new_id.length()-1);
while(new_id.length()<3) {
new_id=new_id+last.toString();
}
}//7단계
return new_id;
}
}
단계별로 차근차근 구현하면 되는 문제이다. 문자열을 다루는 방법을 잘 알면 풀 수 있다.
다만 정규표현식
을 알면 더 쉽게 풀 수 있다. 정규표현식을 처음봐서 헷갈리는데 일단은 여기서 사용한 것만 제대로 알아놓아야겠다.
코드 (정규표현식 O)
new_id= new_id.replaceAll("[^a-z0-9_.-]","") ;//2단계 //a-z, 0-9, _, ., -가 아닌 문자열은 삭제 //[^abc] => abc가 포함되지 않은 문자열 new_id = new_id.replaceAll("^[.]|[.]$",""); //4단계 //맨앞이나 맨끝이 .이면 삭제 //^[abc] => abc로 시작하는 문자열/ [abc]$ => abc로 끝나는 문자열