inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

나도코딩의 자바 기본편 - 풀코스 (20시간)

퀴즈 #6

Quiz6에 대한 피드백 부탁드립니다(이번 문제는 배열이 아니라 String 클래스라서 "*" 처리하는데 굉장히 애먹었네요 ㅎㅎ;;)

429

Ambition

작성한 질문수 61

0

 package chap_06;

public class _Quiz_06 {
    public static String getHiddenData(String src, int index) {
        // 1. substring()을 이용하면 문자열의 일부를 자를 수 있음
        // 2. length()를 이용하면 문자열의 길이를 알 수 있음
        // 알고리즘: src의 길이를 파악한 후, substring()으로 문자열을 먼저 잘라보자

        String temp = src.substring(index); // index부터 슬라이싱

        String hiddenStr = temp.replaceAll("[코딩]", "*"); // 나**
        String hiddenNum = hiddenStr.replaceAll("[0-9]", "*"); // 0~9까지의 모든숫자를 *로 만들겠다

        String ori = src.substring(0, index);
        return ori + hiddenNum;
    }
    public static void main(String[] args) {
        // 1. 개인정보를 비공개로 전환하는 메소드 작성
        // 2. 하나의 메소드에서 모든 동작 처리( getHiddenData(name, 1) )
        // 3. 각 정보는 아래 위치부터 비공개 적용
        String name = "나코딩"; // 이름
        String id = "990130-1234567"; // 주민등록번호
        String phone = "010-1234-5678"; // 전화번호

        System.out.println("이름 : " + getHiddenData(name, 1)); // 개인정보, 비공개 시작 위치
        System.out.println("주민등록번호 : " + getHiddenData(id, 8));
        System.out.println("전화번호 : " + getHiddenData(phone, 9));
    }
}

java 객체지향

답변 1

0

나도코딩

안녕하세요?
정규식을 이용한 퀴즈 풀이, 좋은 접근 방법입니다.

피드백을 드리자면,

String hiddenStr = temp.replaceAll("[코딩]", "*"); // 나**

이 코드는 개인정보 중 이름이 '코딩' 이 아닌 사람에게는 적용될 수 없습니다.
가령 main() 메소드에서 이렇게 이름을 '나코딩' 에서 '나개발' 로 바꿔버리면

String name = "나개발"; // 이름

실행 결과에서 모든 이름이 다 공개되므로 범용적으로 사용할 수는 없게 되는거죠.

이름 : 나개발

또는 '나코딩천재' 와 같은 이름이 되어버려도 비공개 구간이 잘못 설정됩니다.

String name = "나코딩천재"; // 이름

실행 결과는 이렇게 되네요. '코딩' 글자는 감춰졌지만 뒤의 '천재' 는 여전히 공개됩니다.

이름 : 나**천재

이런 경우 정규식을 바꾸어서 다음과 처리하면 모든 한글 이름에 대해 적용됩니다.

String hiddenStr = temp.replaceAll("[가-힣]", "*");

이름 부분 말고 [0-9] 숫자를 * 로 바꾸는 것은 잘 하셨습니다. 주민등록번호와 휴대폰 번호에는 숫자가 아닌 다른 값이 들어갈 수 없으므로 이 곳의 동작은 문제될 게 없겠네요 😊
감사합니다.

0

Ambition

아! 한글부분은 저렇게 하면 되겠네요 영어계정도 있을 수 있으니 정규식으로 따로 한번 연습해보겠습니다 감사합니다 :)

0

Ambition

아, 참고로 정규표현식을 각각 변수에 저장할 필요없이, String hiddenData = temp.relaceAll("[0-9가-힣a-zA-Z]", "*"); 로 코드길이를 더 줄일 수 있네요!! 정규표현식이 특정 기호로 마스킹하는데 굉장히 편리하다는 것을 알았습니다 😄

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

146

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

119

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

72

1

사고력 키우는 법이 어떤게 있나요?

0

94

2

getter setter

0

103

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

80

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

76

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

115

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

117

2

응용이 어렵습니다.

0

206

2

IntelliJ가 보이지 않습니다.

0

187

3

JDK 버전 문의

0

130

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

123

2

Iterator 문의

0

105

1

코드 순서 문의

0

143

1

클래스 메소드

0

150

2

Quiz_05 관련 질문드립니다 !

0

118

2

다운로드가 안됩니다

0

165

2

다형성

0

120

2

HashMap

0

81

2