문제요약:
1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
코드:
class Solution {
public String solution(String new_id) {
String answer = new_id.toLowerCase(); //1단계
StringBuilder step2 = new StringBuilder();
for(int i=0;i<answer.length();i++){ // 2단계
char k = answer.charAt(i);
if((k>='a'&&k<='z')||(k>='0'&&k<='9')||(k=='-')||(k=='_')||(k=='.')){
step2.append(k);
}
}
answer=step2.toString();
while (answer.contains("..")) { //3단계
answer = answer.replace("..", ".");
}
if(answer.length()>0){
if(answer.charAt(0)=='.'){ //4단계
answer = answer.substring(1,answer.length());
}
}
if(answer.length()>0){
if(answer.charAt(answer.length()-1) == '.'){
answer = answer.substring(0,answer.length()-1);
}
}
if(answer.equals("")){ //5단계
answer="a";
}
if(answer.length()>=16){ //6단계
answer = answer.substring(0,15);
if(answer.charAt(answer.length() - 1)=='.'){
answer = answer.substring(0,answer.length() - 1);
}
}
StringBuilder step7 = new StringBuilder(answer);
if(step7.length()<=2){
char k=step7.charAt(answer.length()-1);
while (step7.length() < 3) {
step7.append(k);
}
answer=step7.toString();
}
return answer;
}
}
코드 풀이:
사용한 함수:
1.toLowerCase(); 문자열에 담겨있는 모든 알파벳을 소문자로 변경해줌
<->
toUpperCase();문자열에 담겨있는 모든 알파벳을 대문자로 변경해줌
2.StringBuilder 함수는 아니지만 문자열을 합칠때 많이 사용한다고함
문자열을 추가할땐 append()사용하고 다시 String 으로 바꿀 땐 toString()
3.charAt(i) 문자열에 있는 i 번째 문자를 나타낼 수있는 함수
4.substring(i,j) 문자열에서 i번째부터j-1번째 까지 잘라낸다.
1단계 에선 대문자를 소문자로 바꾸는 것이기 때문에 toLowerCase()사용
2단계에선 소문자 숫자 3가지 문자를 제외하고 다 제거 하는 것이기 때문에 하나하나 비교하여 새로운 문자열에 추가해야한다 그렇기 때문에 charAt()사용하여 조건에 맞을경유 StringBuilder 에 추가하여 for문 종료 후 다시 toString() 해준다.
3단계 에서는 연속된 .을 .하나로 바꾸는 것이기 때문에 while()문 사용하여 replace 해준다.
4단계 에서는 첫번째 , 마지막번째에 . 이있으면 제거 하는 것이기 때문에 length 가 0보다 클경우 substring 해준다 이때 주의할점은 substring 은 시작부터 종료점 전까지 이기 때문에 (0,15)일경우 0부터 14 까지 이다 이점을 주의 그리고 length 는 0부터가 아니라 1부터 인 것을 주의
5단계에서는 공백일 경우 a 를 추가 해주는 것이기 떄문에 .equal("")으로 비교 해줌
6단계는 15자 이하 마지막 글자 . 제거 이기 때문에 substring 해준다.
7단계에서는 두자 이하 일경우 마지막 글자를 반복 해주어야 하기 때문에 StringBuilder 사용