-> 자세한 내용 보러가기
<class Solution {
public String solution(String new_id) {
//정규식을 이용하는 문제?
//1단계 : 대문자를 소문자로 치환
new_id = new_id.toLowerCase();
//2단계 : 알파벳 소문자, 숫자, 하이픈, 언더바, 마침표를 제외한 모든 문자 제거
new_id = new_id.replaceAll("[^a-z0-9-_.]","");
//3단계 : new_id 마침표가 2번 이상이면, 연속된 부분을 하나의 마침표
new_id = new_id.replaceAll("\\.{2,}",".");
//4단계 : 마침표가 처음이나 끝에 위치하면 제거
new_id = new_id.replaceAll("^\\.|\\.$", "");
//5단계 : 빈문자열? -> a 대입
if(new_id.isEmpty()) new_id = "a";
//6단계 : 길이가 16글자 이상? -? 첫 15문자를 제외한 나머지 문자 제거
// -> 마지막이 마침표라면 제거
if(new_id.length() >= 16) {
new_id = new_id.substring(0,15);
new_id = new_id.replaceAll("\\.$","");
}
//7단계 : new_id길이가 2자 이하라면 마지막 문자를 붙인다
while (new_id.length() <= 2) {
new_id += new_id.charAt(new_id.length() - 1);
}
return new_id;
}
}
class Solution {
public String solution(String new_id) {
//1단계: 모든 대문자를 대응하는 소문자로 치환
new_id = new_id.toLowerCase();
StringBuilder sb = new StringBuilder();
//2단계 : 알파벳 소문자, 숫자, 빼기, 밑줄, 마침표를 제외한 모든 문자를 제거
for(char ch : new_id.toCharArray()){
if(Character.isLetterOrDigit(ch) || ch == '-' || ch == '_' || ch == '.'){
sb.append(ch);
}
}
//3단계 : 마침표가 2번 이상 -> 하나의 마침표로 변경
int idx = 0;
while(idx < sb.length()){
if(sb.charAt(idx) == '.'){
//1. 마침표이면 연속해서 마침표인지 확인해야함 -> 마침표 숫자 세기
int cnt = 1; //마침표 숫자
while((idx + cnt) < sb.length() && sb.charAt(idx + cnt) == '.'){
cnt++;
}
if(cnt > 1){
sb.delete(idx + 1, idx + cnt);
}else{
idx++;
}
}else{
idx++;
}
}
//4단계 : 마침표가 처음이나 끝에 위치하면 제거 -> 길이가 0보다 커야함
if(sb.length() > 0 && sb.charAt(0) == '.') sb.deleteCharAt(0);
if(sb.length() > 0 && sb.charAt(sb.length() -1) == '.')
sb.deleteCharAt(sb.length() -1);
//5단계 : 빈 문자열이라면 new_id에 'a' 대입
if(sb.length() == 0) sb.append('a');
//6단계 : 길이가 16자 이상이면 15개 문자로만
if(sb.length() >= 16) sb.setLength(15);
//제거후 마지막에 마침표가 위치? -> 제거
if(sb.charAt(sb.length()-1) == '.') sb.deleteCharAt(sb.length()-1);
//7단계 : 2글자 미만이면 마지막 문자를 3이 될때까지 반복
while(sb.length() < 3){
sb.append(sb.charAt(sb.length() -1));
}
return sb.toString();
}
}