사이드 프로젝트 중 이메일(아이디) 찾기 API를 구현해야 했는데, 별표(*)로 마스킹해서 응답을 내려달라는 요구사항이 추가되었다.
도메인 앞의 아이디 부분에서 앞의 3개 문자 이후의 문자들을 마스킹해야 했다.
private String mask(String email) {
String[] splitEmail = email.split("@");
return splitEmail[0].substring(0, 3) + "*".repeat(splitEmail[0].length() - 3) +
"@" + splitEmail[1];
}
이해하기는 쉬운데.. 🤔
정규 표현식을 사용하면 더 간단하게 처리할 수 있을 것 같았다.
private String mask(String email) {
return email.replaceAll("(?<=.{3}).(?=[^@]*?@)", "*");
}
한 줄로 줄어들었다!
(?<=.{3})
: 앞의 3개 문자(어떤 문자든 상관없음) 뒤에 있는 문자들을 찾고?<=
: 찾으려는 패턴이 어떤 다른 패턴 뒤에 있어야 찾음)(?=[^@]*?@)
: @
앞에 있으면서 @
가 나타나지 않는 문자들을 찾고?=
: 찾으려는 패턴이 어떤 다른 패턴 앞에 있어야 찾음)