https://programmers.co.kr/learn/courses/30/lessons/72410
class Solution {
public String solution(String new_id) {
String answer = new_id
//1. 소문자로 치환
.toLowerCase()
//2. 알파벳 소문자, 숫자, -, _, . 제외하고 모든 문자 제거
.replaceAll("[^\\.\\-_0-9a-z]", "")
//3. 마침표.이 2번 이상 연속된 부분 하나로 치환
.replaceAll("[.]+", ".");
//4. 마침표가 처음이나 끝에 위치한다면 제거
if (answer.startsWith(".")) answer = answer.substring(1);
if (answer.endsWith(".")) answer = answer.substring(0, answer.length()-1);
//5. 빈 문자열이라면 "a" 대입
if (answer.isEmpty()) answer = "a";
//6. 16자 이상이면 첫 15개의 문자를 제외한 나머지 제거
//제거 후 마침표가 마지막에 위치한다면 마침표 제거
if (answer.length() >= 16)
answer = answer.substring(0, 15).endsWith(".") ?
answer.substring(0, 14) : answer.substring(0, 15);
//7. 길이가 2자 이하라면 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 추가
if (answer.length() <= 2) {
char last = answer.charAt(answer.length()-1);
while (answer.length() < 3) {
answer += last;
}
}
return answer;
}
}
테스트 코드 사용하면서 계속 수정 변경했는데, 마지막에 15번 테스트를 통과하지 못했다.
다른 답안을 검색해보니 참고할만한 메소드가 많이 나와서 거의 그대로 정리하였다.
정규표현식은 아직 햇갈리는데
[^\\.\\-_0-9a-z]은
^은 not, \\.은 문자그대로 . \\-_은 \\-\\_을 합한 표현같다(바꿔서도 통과).
'Language > JAVA' 카테고리의 다른 글
[디자인패턴]controller pathvariable로 service 구현체 주입하기 (0) | 2022.06.16 |
---|---|
[Java with Unit Test] equals와 hashCode (0) | 2022.06.16 |
[프로그래머스] 시저 암호 (0) | 2022.01.27 |
#문자열 포함여부 확인, 치환 + 자주 쓰는 정규식 패턴 (0) | 2022.01.27 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2022.01.27 |