작성
·
342
·
수정됨
0
제가 수정해서 만든 코드들도 정상적으로 작동하는 데 '나도코딩'님이 예시로 준 코드와 차이점이 뭔가요?
제 코드가 메모리를 더 차지해서 이런 방법으로 쓰진 않나요?
퀴즈 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