프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때,
고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
phone_number | return |
---|---|
"01033334444" | "*******4444" |
"027778888" | "*******8888" |
class Solution {
public String solution(String phone_number) {
String star = phone_number.substring(0, phone_number.length()-4)
.replaceAll("[0-9]", "*");
String last = phone_number.substring(phone_number.length()-4);
return star + last;
}
}
subString()
메서드로 처음부터 phone_number.length()-4 미만까지를 범위로 잡음.replaceAll()
메서드로 정규 표현식을 사용, class Solution {
public String solution(String phone_number) {
char[] ch = phone_number.toCharArray();
for(int i=0; i<ch.length-4; i ++){
ch[i] = '*';
}
return String.valueOf(ch);
}
}
String.valueOf()
메서드는 Object값을 String형으로 변환할 때 주로 사용하는데, 배열 ch의 원소를 String타입으로 변환하여 return함.toString()
메서드와의 차이점은 null값에 따른 NPE의 발생 유무.String.valueOf()
메서드는 파라미터로 null이 오면 "null"이라는 문자열을 출력하므로 NPE 발생X, toString()
메서드는 NPE 발생O.class Solution {
public String solution(String phone_number) {
return phone_number.replaceAll(".(?=.{4})", "*");
}
}
. (?=.) {숫자} .(?=.{4}) 임의의
문자 한 개.뒷쪽에 임의의 문자 한 개를 제외하고 선택. 숫자 만큼의 자릿수. 모두 합치면, 뒤쪽에서 임의의 문자 4개를 제외한 임의의 문자 한 개를 선택하는 것.
즉, 핸드폰 번호 뒷 4자리 제외 모두 *로 치환함.
조만간 정규 표현식에 대해서도 포스팅을 해야겠다 ㅎ_ㅎ
정규 표현식을 사용하니 코드가 한 줄만에 끝나는 어메이징,,,✨
아무래도 코테 문제가 배열과 반복문을 사용하는 것이 많다보니 이제 배열을 이렇게 바꿨다가 저렇게 바꿨다가는 어느정도 감히 잡히는데~~
새삼 문자열을 자르고 치환하는거는 오랜만이라 조금 버벅거렸다 ^.ㅠㅋㅋㅋ
특히나 replace()
메서드는 잘 알고 사용하고 있었지만 replaceAll()
메서드는 스치듯이 보고 거의 사용 안 해본 듯?!🤔 첫번째 인자로 정규 표현식을 사용한다고 하니 정규 표현식 포스팅할 때 예제로 써먹어야징~~ㅎㅎㅎㅎㅎ