2021 KAKAO BLIND RECRUITMENT 신규아이디추천
public String solution(String str) {
String answer = "";
//1,2.소문자 + 알파벳,. _ - 를 제외한 문자삭제
str = str.toLowerCase().replaceAll("[^a-z0-9-_.]","");
//3. 연속된 마침표 제거 + 4. 첫,끝 . 제거
str = str + " ";//비교를위한 공백추가
for(int i=0; i<str.length();i++) {
if(!(str.charAt(i) == '.' && str.charAt(i) == str.charAt(i+1))) {
answer += str.charAt(i);
}
}
if(answer.charAt(0) == '.') answer = answer.substring(1);
answer = answer.substring(0,answer.length()-1); //공백제거.
if(!(answer.isBlank())&& answer.charAt(answer.length()-1) == '.') answer = answer.substring(0,answer.length()-1);
//5.빈문자열일시 a대입
if(answer.isBlank()) answer = "a";
//6. 16글자 이상시 15까지만
if(answer.length()>15) answer = answer.substring(0,15);
if (answer.charAt(answer.length()-1) =='.') {
answer = answer.substring(0,answer.length()-1);
}
//7. 2자 이하일시 끝에것 추가
while(answer.length()<3) {
answer += answer.charAt(answer.length()-1);
}
return answer;
}
문자열 다루는것의 총집합인것 같다..
다른분의 풀이를 보니 정규표현식을 이용해서 (temp 는 현재값)
temp = temp.replaceAll("[.]{2,}",".");
--> ' . ' 이 두개 이상있을시 . 으로 replace
temp = temp.replaceAll("^[.]|[.]$","");
--> ^ 는 문자열의 시작, $는 문자열의 끝을 뜻하고, |는 선택패턴. ""로 replace.
(선택 패턴이란?
| 문자를 이용하면 A | B 의 패턴으로 A 혹은 B에 매칭할 수 있다.
예를 들어 tomato와 potato에 모두 매칭하고 싶다면 tomato|potato 라고 쓸 수 있다.
선택 패턴은 이후에 등장하는 그룹 패턴과 관련하여 보다 강력하게 쓰일 수 있다.)