1. SOLUTION
정규표현식을 사용해서 차근차근 구현해주면 된다.
근데 정규표현식을 잘 몰라서(...) 공부하면서 풀었음...ㅋ
생각해보면 파이썬이나 자바스크립트로도 정규표현식을 사용해본 적이 거의 없는것같다.
자주사용되는 정규 표현식 문법은 다음과 같다. 자유롭게 사용할 수 있을 정도로 알아두는 게 좋을듯!
정규 표현식 | 설명 |
^ | 문자열 시작, [] 안에 있을 경우 부정의 의미로 사용 |
$ | $ 앞의 문자열로 종료되는지 판단 |
. | 임의의 문자 1개 (단 \은 넣을 수 없음) |
* | 앞 문자가 없거나 있거나 (여러 개 있을 수도 있음) |
+ | 앞 문자가 1개 이상 |
? | 앞 문자가 없거나 1개 있음 |
[ ] | [] 안의 문자가 있는지 확인, 두 문자 사이는 - 기호로 범위를 나타냄. [] 내에서 ^ 가 존재하면 not을 나타낸다. |
{ } | 문자의 개수를 나타냄 |
( ) | 소괄호 안의 문자를 하나의 문자로 인식 (그룹) |
| | or 연산 |
\ | 정규 표현식 역슬래시(\)는 확장문자 (역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미) |
2. CODE
class Solution {
public String solution(String new_id) {
String answer = "";
// 소문자 변환
new_id = new_id.toLowerCase();
// 소문자, 숫자, '-', '_', '.' 제외한 모든 문자 공백으로 바꾸기
new_id = new_id.replaceAll("[^a-z0-9-_.]", "");
// 두번 이상 연속된 '.'는 하나의 '.'로 바꾸기
new_id = new_id.replaceAll("\\.{2,}", ".");
// '.'가 처음이나 마지막 부분에 있다면 공백으로 바꾸기
new_id = new_id.replaceAll("^(\\.)|(\\.)$", "");
// new_id가 빈 문자열이면 new_id = 'a'
if (new_id.length() == 0)
new_id += 'a';
// 16자 이상이면 첫 15개 문자만 남기고 모두 공백으로 변경, '.'가 마지막이라면 '.'까지 공백으로 변경
if (new_id.length() >= 16) {
new_id = new_id.substring(0, 15).replaceAll("(\\.)$", "");
}
// 2자 이하면 마지막 문자를 길이가 3이 될때까지 추가해주기
while(new_id.length() < 3) {
new_id += new_id.charAt(new_id.length() - 1);
}
return new_id;
}
}
댓글