Day9

DeokHun KIM·2022년 7월 11일
0

java

목록 보기
13/30

실습 - 문자열 다루기
01234567890123
String str = "900108-1234567"; // 주민등록 번호
1. 정확히 입력된 데이터인지 여부 확인
(전체 자리 수 앞에 6개+'-'+7개 = 총 14개인지 확인하고 '-'의 위치: 7번째인지 확인)
2. 생년월일 정보를 추출하여 출력: ##년도, ##월, ##일 이렇게 출력
3. 성별 확인하고 출력: 1과3은 남성, 2과4 여성
4. 데이터의 값 검증(월: 1~12, 일: 1~31)
참고: int num = Integer.parseInt("12"); // "12" -> 12


//1. 정확히 입력된 데이터인지 여부 확인
(전체 자리 수 앞에 6개+'-'+7개 = 총 14개인지 확인하고 '-'의 위치: 7번째인지 확인)

String str = "900108-1234567";	
		
		System.out.println("--- 전체 데이터 크기 확인 ---");
		if (str.length() == 14) {
			System.out.println("[정상] 전체길이 14자리");
		} else {
			System.out.println("[비정상] 전체길이 " + str.length());
		}
			
		int strLen = str.length();

--- 전체 데이터 크기 확인 ---
[정상] 전체길이 14자리

System.out.println("---- 7번째 문자(-) 확인");
		// 7번째(인덱스는 6번) 위치의 문자가 '-' 여부(true, false) 확인
		System.out.println(">> str.charAt(6) 사용");
		if (str.charAt(6) == '-') {
			System.out.println("[정상] 7번째 위치에 '-'가 존재합니다");
		}
		if (str.charAt(6) != '-') {
			System.out.println("[비정상] 7번째 위치에 '-'가없음");
		}
		
		// '-' 문자의 위치를 확인(첫번째로 찾은 위치가 6번 인덱스냐?) 
		System.out.println(">> str.idenxOf('-') 사용(비정상일때만 메시지 표시)");
		if (str.indexOf("-") != 6) {
			System.out.println("[비정상] '-' 첫번째 위치가 7번째가 아님 : " + str.indexOf('-'));
		}
		
		System.out.println("=== ::::문자열 비교처리 : equals() 사용 할 것 ===");
		System.out.println(">> substring() 사용방식");
		System.out.println("str.substring(6, 7) : " + str.substring(6, 7));   //6번 인덱스부터 7번 인덱스까지
		System.out.println("str.substring(6, 7) == \"-\" : " + (str.substring(6, 7) == "-"));
		System.out.println("str.substring(6, 7).equals(\"-\") : " + str.substring(6, 7).equals("-"));

		if (str.substring(6, 7).equals("-")) {
			System.out.println("[정상] 6번 인덱스에 \"-\" 있음");
		} else {
			System.out.println("[비정상] 6번 인덱스에 \"-\" 없음");
		}

---- 7번째 문자(-) 확인
str.charAt(6) 사용
[정상] 7번째 위치에 '-'가 존재합니다
str.idenxOf('-') 사용(비정상일때만 메시지 표시)
=== ::::문자열 비교처리 : equals() 사용 할 것 ===
substring() 사용방식
str.substring(6, 7) : -
str.substring(6, 7) == "-" : false
str.substring(6, 7).equals("-") : true
[정상] 6번 인덱스에 "-" 있음

//2.생년월일 정보를 추출하여 출력: ##년도, ##월, ##일 이렇게 출력
// 01234567890123
// str = "900108-1234567";

String yymmdd = str.substring(0, 6);
		System.out.println("yymmdd : " + yymmdd);
		String yy = yymmdd.substring(0, 2);
		String mm = yymmdd.substring(2, 4);
		String dd = yymmdd.substring(4, 6);
		System.out.println("생년월일 : " + yy + "년 " + mm + "월 " + dd + "일 ");
		
		String flag = str.substring(7, 8);
		
		String yyyy = yy; 
		//컴파일 오류를 없애기 위해 빈값(yy)을 입력해준다. String yyyy; 로하면 else if 뒤에 코드상 100퍼가 아니라 오류가 난다
		if ("1".equals(flag) || "2".equals(flag)) {
			yyyy = "19" + yy;
		} else if ("3".equals(flag) || "4".equals(flag)) {
			yyyy = "20" + yy;
		}
		System.out.println("생년월일 : " + yyyy + "년 " + mm + "월 " + dd + "일 ");
		System.out.println("----");
		//=============================
		
		switch (flag) {
		case "1":
		case "2":
			yyyy = "19" + yy;
			break;
		case "3": case "4":
			yyyy = "20" + yy;
			default:
				yyyy = yy;
				break;
		}
		System.out.println("생년월일 : " + yyyy + "년 " + mm + "월 " + dd + "일 ");
		System.out.println("----");

yymmdd : 900108
생년월일 : 90년 01월 08일
생년월일 : 1990년 01월 08일

생년월일 : 1990년 01월 08일

//3. 성별 확인하고 출력: 1과3은 남성, 2과4 여성

if ("1".equals(gender) || "3".equals(gender)) {
			System.out.println("주민번호 뒷자리(첫글자) : " + gender + "(남성)");
		} else if ("2".equals(gender) || "4".equals(gender)) {
			System.out.println("주민번호 뒷자리(첫글자) : " + gender + "(여성)");
		}
		
		System.out.println("---");
		switch (gender) {
		case "1": case "3":
			System.out.println("주민번호 뒷자리(첫글자) : " + gender + "(남성)");
			break;
		case "2": case "4":
			System.out.println("주민번호 뒷자리(첫글자) : " + gender + "(여성)");
			break;
		default:
			System.out.println("외국인?");
			break;
		}

주민번호 뒷자리(첫글자) : 1(남성)
주민번호 뒷자리(첫글자) : 1(남성)

//4. 데이터의 값 검증(월: 1~12, 일: 1~31)
//참고: int num = Integer.parseInt("12"); // "12" -> 12

String sMonth = str.substring(2, 4);
		int month = Integer.parseInt(sMonth);  // int <--- String : 형변환
		
		if (month >= 1 && month <= 12) {
			System.out.println("[정상] 월 데이터 정상(1~12): " + month);
		} else {
			System.out.println("[비정상] 월 데이터 1~12 범위가 아님(데이터: " + month + ")");
		}
		
		//비정상에 대해서만 처리할 경우
		if (month < 1 || month > 12) {
			System.out.println("[비정상] 월 데이터 1~12 범위가 아님 : " + month);
		}
		
		System.out.println(">> 일자 확인");
		int day = Integer.parseInt(str.substring(4, 6)); // "08" --> 8
		if (day >= 1 && day <= 31) {
			System.out.println("[정상] 일 데이터 범위(1~31): " + day);
		} else {
			System.out.println("[비정상] 일 데이터 범위(1~31) 벗어남: " + day);
		}

0개의 댓글