[프로그래머스] 핸드폰 번호 가리기 java
메서드 하나하나 외우기 어려워서 기록 다시 시작한다.
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
- phone_number는 길이 4 이상, 20이하인 문자열입니다.
| "01033334444" | "*******4444" |
| "027778888" | "*****8888" |
내 풀이
private static String Solution(String num){
// 내가 푼 방법
StringBuilder sb = new StringBuilder();
int len = num.length();
for(int i=0; i<len; i++){
if(i >= len-4){
sb.append(num.charAt(i));
} else{
sb.append("*");
}
}
return sb.toString();
}
방법1 : 정규식 사용하기
.은 하나의 문자를 의미하고 ?=.{4} 4자리 문자 외 앞에 있는 모든 문자를 *로 변환한다.
return num.replaceAll(".(?=.{4})", "*");
방법2 : String -> char -> String 형식 변화하기
이때 ch.toString()과 String.valueOf(ch)의 차이가 무엇인지 궁금했다. 결과적으로 String 타입이 되는 것이 아닌가 생각했다. 결과적으로 ch.toString() ;하면 원하는 값이 나오지 않는다.
왜냐하면 String.valueOf(ch);은 char인 ch를 String 형식으로 바꾸지만, ch.toString()은 Character 형식으로 호출하기 때문이다. ch가 기본형이라면 Character형식으로 박싱되어 toString()메서드가 호출된다.
그러므로 ch.toString()을 실행하면 char -> Character -> String으로 타입이 변환되는 것이다.
char[] ch = num.toCharArray();
for(int i=0; i<ch.length-4; i++){
ch[i] = '*';
}
return String.valueOf(ch);
//return ch.toString();
방법3 : subString() 사용하기
subString(index);는 index부터 끝까지 출력한다.
subString(3, 5); 처럼 코드를 작성해도 된다. index 3부터 5전까지 문자가 출력된다.
String answer = "";
for(int i=0; i< num.length()-4; i++)
answer += "*";
answer += num.substring(num.length()-4);
return answer;