작성
·
367
·
수정됨
답변 2
0
아니 그래도 대단하시네요. 앞에서 배운 Replace를 활용해서 작성하신것보니 상상도 못했는데.. 이정도로 풀이를 했다는것은 for문 활용하는것도 충분히 하실것같습니다... 저는 진짜 어떻게 풀이해야할지 감이 안와서 곰곰히 생각하다가 그냥 나코딩 선생님의 풀이를 봐버렸는데..
0
안녕하세요?
우선 퀴즈에서 원한 것과 동일한 형태의 결과가 나오는 프로그램을 작성하셨기 때문에 충분히 잘하셨습니다. 특히 주민등록번호나 전화번호(스마트폰)와 같이 정해진 자릿수가 있는 경우에는 작성하신 것처럼 하드코딩이 필요할 수도 있습니다. 하지만 만약 교육기관의 퀴즈였다면, 그리고 실제 평가가 이루어진다면 퀴즈에서 요청한 getHiddenData() 메소드를 완성하지 않으셨기 때문에 감점 요인이 발생할 수 있습니다.
그러나 가장 중요한 것은 바로 이름인데요. 퀴즈에서는 한 가지 예시만 들었지만 사람의 이름은 보통 3글자로 이루어지지만 때로는 2글자, 4글자, 또는 그 이상이 될 수도 있어요.
만약 "김코" 라는 사람의 개인 정보였다면 어떻게 되었을까요?
public static void main(String[] args) {
// 이름 2글자
String myinfo = info("김코\n", "010507-1234567\n", "010-1234-5678");
System.out.println(myinfo);
myinfo = myinfo.replaceAll(myinfo.substring(1, 3), "**");
myinfo = myinfo.replaceAll(myinfo.substring(12, 18), "******");
myinfo = myinfo.replaceAll(myinfo.substring(28, 32), "****");
System.out.println(myinfo);
}
다음과 같이 에러가 발생해버립니다. myinfo 에 들어가는 총 글자수가 짧아졌기 때문에 마지막 substring 에서 문제가 발생한것이죠.
김코
010507-1234567
010-1234-5678
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 32
at java.lang.String.substring(String.java:1963)
at Sample.main(Sample.java:12)
이번에는 "김코딩짱" 이라는 사람의 개인 정보였다면 어떻게 되었을까요?
public static void main(String[] args) {
// 이름 4글자
String myinfo = info("김코딩짱\n", "010507-1234567\n", "010-1234-5678");
System.out.println(myinfo);
myinfo = myinfo.replaceAll(myinfo.substring(1, 3), "**");
myinfo = myinfo.replaceAll(myinfo.substring(12, 18), "******");
myinfo = myinfo.replaceAll(myinfo.substring(28, 32), "****");
System.out.println(myinfo);
}
보시는 것처럼 이름의 일부만 가려지고 주민등록번호, 전화번호도 비공개 처리가 올바로 되지 않은 것을 확인할 수 있습니다.
김코딩짱
010507-1234567
010-1234-5678
김**짱
010507-******7
010-1234****8
이번 장은 메소드를 배우기 위한 단원이었기 때문에 해설을 보신 뒤에 다시 한 번 처음부터 작성하며 연습해보시면 도움될 것 같아요 😊 그리고 프로그래밍에 있어서 문제 해결을 위한 방법은 한 가지만 있는 것은 아니므로 다양한 시도를 해보는 것은 정말 좋은 경험입니다. 그러면서 겪는 시행착오가 초보자분들을 더욱 단단하게 만들어줄 거에요.
감사합니다.