인프런 커뮤니티 질문&답변

핫도그님의 프로필 이미지
핫도그

작성한 질문수

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

If (전반전)

퀴즈 3번 질문

작성

·

342

·

수정됨

0

 제가 수정해서 만든 코드들도 정상적으로 작동하는 데 '나도코딩'님이 예시로 준 코드와 차이점이 뭔가요?

  1. 제 코드가 메모리를 더 차지해서 이런 방법으로 쓰진 않나요?

  2. 퀴즈 3번의 예시가 indexOf를 사용할 필요가 없을 정도로 간단해서 쓸 필요가 없는 건가요?

    public class _Quiz_03 {
        public static void main(String[] args) {
            String B01 = "901231-1234569"; //하이픈을 포함한 정수(숫자)들을 문자열로 만들기 위해 변수 String 사용
            String B02 = "030708-4567890"; //하이픈을 포함한 정수(숫자)들을 문자열로 만들기 위해 변수 String 사용
    //
            System.out.println("김영희님의 주민번호는 " + B01.substring(B01.indexOf("9"), B01.indexOf("2", 6)) + " 입니다.");
            System.out.println("김철수님의 주민번호는 " + B02.substring(B02.indexOf("0",0), B02.indexOf( "5", 5)) + " 입니다.");
            // (내가 처음 만든 방식) 잘 작동은 되지만 코드가 길어서 메모리를 더 잡아 먹는다.
    
            //indexOf( "찾을 특정 문자" , "시작할 위치" ) 이런식으로 사용해 주면된다.
            //"시작할 위치" 같은경우는 생략이 가능하며 생략할 경우 0번째 즉 처음부터 찾기 시작한다.
            System.out.println(B01.substring(B01.indexOf("9"),B01.indexOf("2", 4)));
            System.out.println(B02.substring(B02.indexOf("0"), B02.indexOf("5")));
            //(수정된 방법)
    
            //(나도코딩님 예시)
            String id = "901231-1234569";
            System.out.println(id.substring(0,8)); //0 위칩터 8위치 직전가지
        }
    }
    

답변 2

1

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?
핫도그님께서 남겨주신 소스코드는 B01 또는 B02 에 해당하는 주민등록번호를 가진 사람이 아니면 사용할 수 없는 코드입니다. 고장난 시계도 하루에 2번은 맞지만 그 외의 시간은 모두 틀리듯, 소스코드의 문자열에서 일부만 다른 것으로 바뀌어도 금방 에러 (또는 잘못된 결과) 가 발생합니다.

수정 전, 원래 데이터는 이렇게 되어 있었습니다.

String B01 = "901231-1234569"; // 수정 전

실행 결과는 이렇게 잘 나타나네요.

김영희님의 주민번호는 901231-1 입니다.

위 데이터의 첫 번째 자리를 9 에서 0 으로 바꾸었습니다.

String B01 = "001231-1234569"; // 수정 후

그랬더니 다음과 같은 오류가 발생해버렸어요.

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -5
	at java.lang.String.substring(String.java:1967)
	at _Quiz_03.main(_Quiz_03.java:7)	

프로그램은 물론 단 한 사람을 위해 만들어질 수도 있기는 하겠지만, 퀴즈에서 요청한 내용은 대한민국 국적을 가진 모든 사람의 개인정보에 공통적으로 적용할 수 있는 프로그램이었습니다. 그렇기 때문에 특정 정보를 포함하는 형태로 코드를 작성하기보다는 모든 데이터에 적용될 수 있는 조건을 찾아서 처리하는 것이 좋습니다 😊
감사합니다.

0

핫도그님의 프로필 이미지
핫도그
질문자

완전히 이해됐습니다. :) 궁금증이 해결돼서 좋네요. 감사합니다:)

핫도그님의 프로필 이미지
핫도그

작성한 질문수

질문하기