[JAVA] 핸드폰 번호 가리기

태로미·2023년 9월 15일
0

Programmers

목록 보기
16/29
post-thumbnail

❓문제


프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때,
고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.



🚫제한


  • phone_number는 길이 4 이상, 20이하인 문자열입니다.


💻입출력 예


phone_numberreturn
"01033334444""*******4444"
"027778888""*******8888"













📝해결


1. subString & replaceAll

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;
	}
}
  • phone_number.length()-4는 핸드폰 번호 뒷자리 4개 중 첫 번째를 뜻함.
  • subString() 메서드로 처음부터 phone_number.length()-4 미만까지를 범위로 잡음.
  • replaceAll() 메서드로 정규 표현식을 사용,
    문자열 중 0~9까지의 숫자가 들어있는 문자열은 모두 * 로 치환함.
    • reaplaceAll() 메서드의 첫 번재 인자값은 정규 표현식을 사용함.
  • 핸드폰 번호 뒷자리 4개부터 끝까지의 문자열을 가져옴.
  • length() 메서드는 ‘길이’를 나타내므로 1부터 시작, index는 0부터 시작함.

2. char[] 배열

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);
    }
}    
  • 문자열로 되어있는 phone_number의 값을 char[] 배열로 변환.
  • 핸드폰 번호 뒷 4자리만 출력되야 하므로,
    for문의 범위를 배열 길이-4 전까지만 돌려서 *로 변환.
  • String.valueOf() 메서드는 Object값을 String형으로 변환할 때 주로 사용하는데, 배열 ch의 원소를 String타입으로 변환하여 return함.
    • toString() 메서드와의 차이점은 null값에 따른 NPE의 발생 유무.
    • String.valueOf() 메서드는 파라미터로 null이 오면 "null"이라는 문자열을 출력하므로 NPE 발생X, toString() 메서드는 NPE 발생O.
    • NPE를 방지할 수 있는 String.valueOf()를 사용하는 것이 좋음.
* NPE = NullPointException

3. 정규 표현식

class Solution {
	public String solution(String phone_number) {
    
    	return phone_number.replaceAll(".(?=.{4})", "*");
    }
}    
.(?=.){숫자}.(?=.{4})
임의의
문자 한 개.
뒷쪽에 임의의 문자 한 개를 제외하고 선택.숫자 만큼의 자릿수.모두 합치면, 뒤쪽에서 임의의 문자 4개를 제외한 임의의 문자 한 개를 선택하는 것.
즉, 핸드폰 번호 뒷 4자리 제외 모두 *로 치환함.






💭마무리

  • Level_1 / 25:38
  • Point
    – 문자열 자르고 치환하기
    – String에서 char[] 배열 전환하기
    – 정규 표현식 사용하기

조만간 정규 표현식에 대해서도 포스팅을 해야겠다 ㅎ_ㅎ
정규 표현식을 사용하니 코드가 한 줄만에 끝나는 어메이징,,,✨
아무래도 코테 문제가 배열과 반복문을 사용하는 것이 많다보니 이제 배열을 이렇게 바꿨다가 저렇게 바꿨다가는 어느정도 감히 잡히는데~~
새삼 문자열을 자르고 치환하는거는 오랜만이라 조금 버벅거렸다 ^.ㅠㅋㅋㅋ
특히나 replace() 메서드는 잘 알고 사용하고 있었지만 replaceAll() 메서드는 스치듯이 보고 거의 사용 안 해본 듯?!🤔 첫번째 인자로 정규 표현식을 사용한다고 하니 정규 표현식 포스팅할 때 예제로 써먹어야징~~ㅎㅎㅎㅎㅎ


profile
Here And Now

0개의 댓글