본문 바로가기
JAVA

JAVA 문자열 substring, index ,임의의 학번 부여, 생년월일 출력 문제

by 자바비터 2022. 2. 23.

indexOf(문자)
  • 해당 문자가 들어있는 위치를 알려준다.
  • 문자가 없으면 -1 반환
  • index는 0부터 시작
  • ex) "abcde".indexOf("e") → 4

 

substring(index1, index2)
  • CharAt은 문자 하나만 읽어내지만 substring은 문자열을 읽어 낸다.
  • index1 자리부터 index 2-1 까지 반환.
  • ex) "abcde".substring(1, 3) → "bc"

   

str.lastIndexOf(index)
  • index를 반대방향부터 찾기 시작하여 특정 값이 일치하는 마지막 인덱스를 반환한다.
  • 문자가 없으면 -1 반환
  • ex) "abcde".lastIndex("e") → "e"

  

index
  • index는 str.length-1 이라서 기본적으로 전체 문자열을 모두 검색한다
  • String.substring(start) //문자열 start 위치부터 끝까지 문자열 자르기
  • String.substring(start, end) //문자열 start위치부터 end 전까지 문자열 가져오기
  • ex) String str = "ABCDEF" → A=0 B=1 C=2 D=3 E=4 F=5 의 index를 가진다.

  

substring, random, scanner를 이용한 문제(예제)

문제>> 신입생에게 임의의 학번을 부여하는 프로그램을 작성하라.

신입생으로부터 이름과 생년월일을 입력 받은 후 임의의 학번을 생성하고 이름, 생년월일과 학번을 출력해야 한다.

(1) 생년월일은 yyyy/mm/dd의 형태로 입력해야 한다.

yyyy는 연도를 나타낸다.

mm은 월을 나타내고 1~9월까지는 한자리 숫자이고 10~12월까지는 두 자리 숫자이다.

dd는 일을 나타내고 1~9일까지는 한자리 숫자이고 10~31일까지는 두 자리 숫자이다.

(2) 학번은 17로 시작하고 17xxxx의 형태를 취한다. 학번 xxxx는 1000부터 1009까지의 정수여야한다.

  

  

import java.util.Random;
import java.util.Scanner;

public class ClassOf {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); //Scanner 클래스 변수 선언 및 초기화
		
		System.out.print("이름을 입력하시오 : ");
		String name = sc.nextLine(); //문자열 입력값 유저의 이름 대입
		System.out.print("생년월일을 입력하시오 (ex 1988/7/28) : ");
		String birthdate = sc.nextLine(); //문자열 입력값 유저의 생년월일 대입
		
		String year = birthdate.substring(0,4); //연도 대입, 생년월일에 index 0~3번까지 4자리
		String num = birthdate.substring(6,7); //월이 1~9월인지 10~12일인지 확인할 변수 
		String month = birthdate.substring(5,6); //월 대입, 월이 시작되는 index 5번으로 초기화
		String days = birthdate.substring(8,9); //일 대입, 일이 시작되는 index 8번으로 초기화
		
		if(num.equals("/")) { //num => 입력받은 생년월일의 index6번 자리가 "/"이라면
			month = birthdate.substring(5,6); //월은 1~9월인 한자리 수.
				if(birthdate.length() <= 8) { //월이 한자리 수 일 때 입력값의 길이가 8이하면 일도 한자리 수
					days = birthdate.substring(7,8);
			 }else {
			 days = birthdate.substring(7,9); //입력값의 길이가 9이상이면 일은 두자리수이기떄문에 두자리수가 저장된다.
			 }
		} else { 
			month = birthdate.substring(5,7); //입력받은 생년월일의 index 6번 자리가 "/"가 아니라면 월은 10~12월인 두자리수.
				if(birthdate.length() <= 9) { //월이 두자리 수 일 때 입력값 길이가 9이하면
					days = birthdate.substring(8,9); //일은 한자리수가 대입되고
			 }else {
			 days = birthdate.substring(8,10); //입력값이 10이상이면 일은 두자리수가 대입된다.
			 }
		}
		
		System.out.printf("이름은 %s,\n", name); // 입력받은 이름 출력
		System.out.printf("%s년 %s월 %s일 ", year, month, days);
		//년, 월, 일로 나눠서 놓은 변수 출력.
		
		Random generator = new Random(); //Random 클래스 변수 선언 및 초기화
		int randomnumber = generator.nextInt(10)+1000;  //1000~1009까지의 정수로 임의의 학번 생성
		int rest = 17; //임의의 학번 앞에 고정값
		System.out.printf("학번 : %d%d", rest, randomnumber); //임의의 학번 생성
		sc.close(); //스캐너 사용 후 닫아주기
	}
}

 

실행 결과 화면

 

월과 일을  1자리수와 2자리수로 나누는게 까다로웠던 문제였다.

역시 문제를 해결하고 완성하면 굉장히 뿌듯하다^.^

 

 

댓글