Programming Language/Java

주민등록번호 뒷자리 첫 번째 숫자 이후로는 '*' 표시하고 출력하기

Ma_Sand 2022. 2. 26. 14:55
반응형

단, 원본 배열은 '*' 표시 없이 복사 배열로 변경하여 출력한다.

 

public void personID() {
    // Scanner로 입력 받기
    Scanner sc = new Scanner(System.in);
    
    System.out.println("하이픈(-)을 포함하여 주민등록번호를 입력하세요.");
    String num = sc.nextLine();  // 하이픈(-) 포함 숫자 입력이므로 문자열 타입
    
    char arr = new char[14]  // 주민등록번호는 하이픈 포함 14자리
    
    for(int i = 0; i < arr.length; i++) {
        // .charAt() : String으로 저장된 문자열 중 한 글자만 선택해서 char 타입으로 변환
        arr[i] = num.charAt(i);
    }
    char[] copy = arr.clone();  // arr배열을 copy배열에 복사
    
    for(int i = 0; i < copy.length; i++) {
        // 주민등록번호 뒷자리 1번째까지가 8자리(하이픈 포함)
        if(i < 8) { 
            copy[i] = num.charAt(i);  // Srting 타입으로 num에 저장된 문자열 글자들을 char 타입으로 변환
        /* 
         * 위의 if문 조건과 반대로 i > 8일 때 *를 출력
         * if(i > 8) {
         *     copy[i] = '*';
         * }
         */
        } 
        else {
            copy[i] = '*';  // char 타입으로 변환됐으므로 작은 따옴표 사용
        }
    }
    System.out.println("=== 복사 배열 출력 ===");
    for(int i = 0; i < copy.length; i++) {   // 복사 배열 copy[]
        System.out.print(copy[i]);
    }
    System.out.println("=== 원본 배열 출력 ===");
    for(int i = 0; i < arr.length; i++) {    // 원본 배열 arr[]
        System.out.print(arr[i]);
    }
    }
}

▼실행결과

하이픈(-)을 포함하여 주민등록번호를 입력하세요.
123456-2134567
=== 복사 배열 출력 ===
123456-2******
=== 원본 배열 출력 ===
123456-2134567

 

① 하이픈을 포함한 정수를 받기 때문에 String 타입으로 num을 받는다.

 

② 한 글자씩 배열에 저장하기 위해 char 배열로 받는다. 그리고 하이픈을 포함한 주민등록번호는 총 14자리이므로 배열 크기를 14로 한다.

 

③ for문은 arr 배열 크기만큼 반복해야 하므로 arr.length로 범위를 정하고, arr 배열에 num 입력값을 저장한다. .charAt()을 사용하여 String 타입의 변수인 num에 입력값을 한 글자씩 char 타입으로 변환시켜준다. 그러면 이 for문은 이제 원본 배열이 된다.

 

④ 그 다음, 이 원본 배열을 복사해야 *을 출력하든 말든 할 것이므로 아까 charAt()을 이용하여 글자들을 char 타입으로 변환시켜줬으므로 이번에도 char 타입으로 copy 배열로 복사를 한다. 복사는 .clone()을 이용한다. clone은 원본 배열을 범위 설정 없이 그대로 복사를 해주기 때문에 clone을 사용한다.

 

⑤ 이제 복사 배열을 만들었으므로 주민등록번호 뒷자리 1번째까지는 원본 배열 그대로 출력하고 이후 2번째 자리부터는 '*'를 출력하게끔 해야한다. 이러한 조건들을 담기 위해선 조건문인 if문을 사용하는 것이 좋다.

 주민등록번호 뒷자리 1번째는 하이픈을 포함해 총 8자리이다. if문으로 for문의 변수 i가 8보다 작을 때와 아닐 때를 작성한다. 변수 i가 8보다 작다는 것은 i가 식을 7번 반복한다는 것인데 for문의 증감식을 보면 후위연산이기 때문에 최종값은 8자리까지 받는다는 것을 알 수 있다. 

 그럼 if문 조건은 다 설정이 되었고 입력값을 받아야 한다. 복사 배열 copy이 입력값 num을 한 글자씩 받아 8번째 자리까지 문자 그대로를 받으면 된다. 그리고 if문 조건이 충족되지 않을 경우, 즉 9번째 자리부터는 copy가 문자를 '*'로 변환한다. 

 

⑥ 마지막으로 출력을 해야 한다. 먼저 copy 배열을 출력하고 원본 배열을 출력할 것이다. 반복문 for문을 사용하여 copy 배열의 크기 만큼 변수 i를 반복한다는 범위를 정하고, println문을 이용하여 copy[i]를 출력한다. 그리고 원본 배열은 변수 i의 범위를 arr 배열 크기로 정하고 arr[i]로 출력한다.

반응형