문제: https://school.programmers.co.kr/learn/courses/30/lessons/72410
1. 코드
class Solution {
public String solution(String new_id) {
String answer = new_id.toLowerCase().replaceAll("[^a-z|0-9|\\-|_|.]", "").replaceAll("[.]+", ".").replaceAll("^[.]|[.]$", "");
if(answer.isBlank())
answer = "a";
if(answer.length() >= 16)
answer = answer.substring(0, 15).replaceAll("^[.]|[.]$", "");
if(answer.length() <= 2)
answer += String.valueOf(answer.charAt(answer.length() - 1)).repeat(3 - answer.length());
return answer;
}
}
2. 설명
문제는 정규식을 활용하여 해결하였습니다.
new_id.toLowerCase().replaceAll("[^a-z|0-9|\\-|_|.]", "")
new_id의 문자열을 소문자로 변환하고 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)가 아닌 문자들은 공백으로 바꿔줍니다.
replaceAll("[.]+", ".")
그 상태에서 마침표(.)가 1개 이상인 문자열 부분을 마침표 1개로 바꿉니다.
replaceAll("^[.]|[.]$", "")
마침표가 문자열의 시작과 끝에 있다면 공백으로 바꾸어줍니다.
if(answer.isBlank())
answer = "a";
만약 공백이라면 a로 초기화해 줍니다.
if(answer.length() >= 16)
answer = answer.substring(0, 15).replaceAll("^[.]|[.]$", "");
16글자 이상이라면 15글자까지로 자르고 마침표가 시작과 끝에 있으면 공백으로 바꾸어줍니다.
if(answer.length() <= 2)
answer += String.valueOf(answer.charAt(answer.length() - 1)).repeat(3 - answer.length());
문자열의 길이가 2 이하라면 문자열의 마지막글자가 3글자가 되도록 이어줍니다.
3. 정리
- 정규식을 이용하면 쉽게 해결할 수 있다.
- 빼기의 경우 정규식에서 범위를 지정할 때 사용하기에 \를 붙여줘야 하는데 자바의 경우 \\로 붙여줘야 한다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 118666번: 성격 유형 검사하기 [Java] (0) | 2023.08.15 |
---|---|
프로그래머스 - 133502번: 햄버거 만들기 [Java] (0) | 2023.08.14 |
프로그래머스 - 67256번: 키패드 누르기 [Java] (0) | 2023.08.12 |
프로그래머스 - 155652번: 둘만의 암호 [Java] (0) | 2023.08.11 |
프로그래머스 - 64061번: 크레인 인형뽑기 게임 [Java] (0) | 2023.08.10 |