https://programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
class Solution {
public String solution(String new_id) {
// 1단계
String answer = new_id.toLowerCase();
// 2단계 기본 메타 문자
answer = answer.replaceAll("[^0-9a-z-_.]", "");
// 3단계 수량자
answer = answer.replaceAll("[.]{2,}", ".");
// 4단계
answer = answer.replaceAll("^[.]|[.]$", "");
// 5단계
if (answer.isEmpty()) {
answer = "a";
}
// 6단계
if (answer.length() >= 16) {
answer = answer.substring(0, 15);
answer = answer.replaceAll("[.]$", "");
}
// // 7단계
// if (answer.length() <= 2) {
// while (answer.length() < 3) {
// answer += answer.charAt(answer.length()-1);
// }
// }
// 7단계
if (answer.length() <= 2) {
answer = String.format("%-3s", answer).replace(' ', answer.charAt(answer.length()-1));
}
return answer;
}
}
기본 메타 문자 | . | 모든 문자와 일치 |
| | 왼쪽 혹은 오른쪽과 일치 | |
[] | 문자 집합 구성원 중 하나와 일치 | |
[^] | 문자 집합 구성원을 제외하고 일치 | |
- | 범위 정의 ( [A-Z]와 같은 형태 ) | |
\ | 다음에 오는 문자를 이스케이프 | |
수량자 | * | 문자가 없는 경우나 하나 이상 연속하는 문자 찾기 |
*? | 게으른 * 문자 | |
+ | 문자 하나 이상 찾기 | |
+? | 게으른 + 문자 | |
? | 문자가 없거나 하나인 문자 찾기 | |
{n} | 정확히 요소와 n번 일치 | |
{m,n} | 요소와 m에서 n번 일치 | |
{n,} | 요소와 n번 이상 일치 | |
{n,}? | 게으른 {n,} | |
위치 지정 | ^ | 문자열의 시작과 일치 |
\A | 문자열의 시작과 일치 | |
$ | 문자열의 끝과 일치 | |
\Z | 문자열의 끝과 일치 | |
\< | 단어의 시작과 일치 | |
\> | 단어의 끝과 일치 | |
\b | 단어의 경계와 일치 | |
\B | 단어의 끝과 일치 | |
특수한 문자 | [\b] | 역스페이스 |
\c | 제어문자와 일치 | |
\d | 모든 숫자와 일치 | |
\D | \d와 반대 | |
\f | 페이지 넘기기(form feed) | |
\n | 줄바꿈 | |
\r | 캐리지 리턴 | |
\s | 공백 문자와 일치 | |
\S | \s 와 반대로 일치 | |
\t | 탭 | |
\v | 수직 탭 | |
\w | 영숫자 문자나 밑줄과 일치 | |
\W | \w와 반대로 일치 | |
\x | 16진수 숫자와 일치 | |
\0 | 8진수 숫자와 일치 | |
역참조와 전후방 탐색 | () | 하위 표현식 정의 |
\1 | 첫 번째 일치한 하위 표현식. 두번째 일치한 하위 표현식은 \2로 표기하는 방식 | |
?= | 전방탐색 | |
?<= | 후방탐색 | |
?! | 부정형 전방탐색 | |
?<! | 부정형 후방탐색 | |
?(backreference)true | 조건 지정 | |
?(backreference)true | flase | else 표현식 조건 지정 | |
대소문자 변환 | \E | \L 혹은 \U 변환을 끝냄 |
\l | 다음에 오는 글자를 소문자로 변환 | |
\L | \E를 만날 때까지 모든 문자를 소문자로 변환 | |
\u | 다음에 오는 글자를 대문자로 변환 | |
\U | \E를 만날 때까지 모든 문자를 대문자로 변환 | |
변경자 | (?m) | 다중행 모드 |