연습문제
🔥 핸드폰 번호 가리기 🔥
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 * 으로 가린 문자열을 리턴하는 함수, solution을 완성하라.
phone_number의 길이는 4이상 20이하인 문자열
1) phone_number = "01033334444"
2) phone_number= "027778888"
1) "*******4444"
2) "*****8888"
class Solution {
public String solution(String phone_number) {
String last = phone_number.substring(phone_number.length()-4,phone_number.length());
String mid = phone_number.substring(0,phone_number.length()-4);
String ch = "";
for(int i=0;i<mid.length();i++){
ch += mid.replace(mid,"*");
}
return ch + last;
}
}
1) substring을 이용해서 핸드폰번호 끝의 4자리를 last에 대입
2) substring을 이용해서 끝의 4자리를 제외한 핸드폰 번호를 mid에 대입
3) String ch 선언
4) * 로 변경해야하는 mid의 길이만큼 반복하면서 ch에 "*"대입
5) ch와 last를 합친 문자열 return
지금와서 생각해보면 ch += "*"로 해도 되는걸 왜 저렇게 했나 싶다.
원하는 결과가 나오기는 했지만 코드가 너무 지저분하고 좋은 코드가 아닌것 같다.
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);
}
}
- toCharArray()
- 문자열을 char형 배열로 바꿔줌
- 반환되는 배열의 길이는 문자열의 길이와 같음
- 주의 : 문자열의 공백 또한 인덱스에 포함됨
- String.valueOf()
- 괄호 안의 해당 객체를 String 객체로 변환
1) char형의 배열 ch에 phone_number.toCharArray() 대입
2) ch의 길이는 phone_number의 길이와 동일
3) 반복문을 ch.length -4만큼 돌게함 (핸드폰번호 뒤에 4자리는 변경하면 안됨)
4) ch의 i번째에 *를 대입
5) 배열인 ch를 String객체로 변환시켜서 return 함
class Solution {
public String solution(String phone_number) {
return phone_number.replaceAll(".(?=.{4})", "*");
}
}
. : 임의의 문자 한 개
(?=.) : 뒷쪽에 임의의 문자 한개를 제외하고 선택
{숫자} : 숫자만큼의 자릿수
.(?=.{4}) : 뒤쪽에서 임의의 문자 4개를 제외한 임의의 문자 한개 선택
따라서 뒷쪽의 문자 4개를 제외한 임의의 문자 한개를 선택해서 *으로 replace하고 그 값을 return
옛날에는 결과만 나오면 상관없었지만 이제는 깔끔하고 좋은 누구나 보고 이해할 수 있는 코드를 작성하고 싶다. 앞으로는 좀 더 고민해서 좋은 코드를 짤 수 있도록 노력할 것이다. 👊👩💻