java.util / java.text 패키지

woom·2022년 11월 20일
0

JAVA

목록 보기
14/18
post-thumbnail

🌼 java.util 패키지

  • 프로그램 작성에 유용한 기능을 제공하는 클래스가 선언된 패키지
  1. Scanner 클래스 : 입력장치로부터 값을 입력받기 위한 기능을 메소드로 제공하는 클래스
  2. Arrays 클래스 : 배열 요소를 처리하기 위한 기능을 메소드로 제공하는 클래스 (검색, 정렬)
  3. Random 클래스 : 난수값 관련 기능을 메소드로 제공하는 클래스
  4. Date 클래스 : 날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하는 클래스 (간단한 형태)
  5. Calendar 클래스 : 날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하는 클래스 (상세)
  6. 자료구조 클래스(Collection Class) : 다수의 객체를 효율적으로 저장하고 관리하기 위한 기능을 메소드로 제공하는 클래스
    • ArrayList, HashSet, HashMap 등
    • Collection 인터페이스(Set와 List) 또는 Map 인터페이스를 상속받은 자식클래스 (인터페이스에 따라 다른 기능 제공)

📕 Random 클래스

  • UUID 클래스 : 범용적으로 사용되는 식별자를 생성하기 위한 기능을 메소드로 제공하는 클래스
    • UUID.randomUUID() : 자동으로 생성된 식별자가 저장된 UUID 객체를 생성하여 반환하는 메소드
    • UUID객체에 저장된 식별자는 숫자와 영문자(소문자), -(4개)의 36개의 문자로 구성된 문자열
    • UUID.toString() : UUID 객체에 저장된 식별자를 문자열 (String 객체)로 반환하는 메소드
  • Random.nextInt(int bound) : 0~bound-1 범위의 정수난수를 발생하여 반환하는 메소드

🐣 예제1 (정수난수)


public class RandomApp {
	public static void main(String[] args) {
		Random random=new Random();
		
		//Random.nextInt(int bound) : 0~bound-1 범위의 정수난수를 반환
		for(int i=1;i<=5;i++) {
			System.out.println(i+"번째 정수난수 = "+random.nextInt(100));}}}
            //0~99 범위의 난수 발생




🐣 예제2 (UUID)

  • 새로운 비밀번호를 제공하는 프로그램 작성
public class NewPasswordApp {
	//새로운 비밀번호를 생성하여 반환하는 메소드
	public static String newPasswordOne() {
		Random random=new Random();
		
		//비밀번호로 사용될 문자들이 저장된 문자열 생성
		String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*_-";
		
		StringBuffer password=new StringBuffer();
		for(int i=1;i<=10;i++) {
			password.append(str.charAt(random.nextInt(str.length())));
		}
		return password.toString();
	}
	
	public static String newPasswordTwo() {
		//UUID.randomUUID() : 자동으로 생성된 식별자가 저장된 UUID객체를 생성하여 반환
		//UUID 객체의 식별자는 숫자와 영문자(소문자),-(4개)의 36개의 문자로 구성
		//UUID.toString() : UUID 객체에 저장된 식별자를 문자열(String 객체)로 반환
		return UUID.randomUUID().toString().replace("-", "").substring(0,10).toUpperCase();
	}
	
	public static void main(String[] args) {
		System.out.println("새로운 비밀번호-1 = "+newPasswordOne());
		System.out.println("새로운 비밀번호-2 = "+newPasswordTwo()); }}
        




🎀 연습문제 (야구게임)

  • BaseBallApp : 정수난수(0~9)를 3개 제공받아 키보드로 입력하여 맞추는 게임

  • 난수와 키보드 입력값은 0~9 범위의 3개의 정수값으로 서로 다르며 0으로 시작 불가능

  • 키보드 입력값이 형식에 맞지 않은 경우 재입력되도록 작성

  • 난수와 입력값을 서로 비교하여 동일한 정수값이 존재할 경우 위치가 같으면 스트라이크 처리하고 다르면 볼로 처리하여 계산

  • 스트라이크가 3개라면 성공 메세지 출력 후 프로그램을 종료하고 아니라면 스트라이크와 볼의 갯수 출력

  • 키보드 입력 기회는 15번을 제공하며 15번 이내에 맞추지 못한 경우 정답(난수) 출력



public class BaseBallApp {
	public static void main(String[] args) {
		Random random=new Random();
		
		//0~9 범위의 정수값 3개를 저장하기 위한 배열 선언 (난수값을 저장하기 위한 배열)
		int[] dap=new int[3];
		
		//규칙에 맞는 난수값을 배열 요소에 저장하도록 처리하는 반복문
		while(true) {
			for(int i=0;i<dap.length;i++) {
				dap[i]=random.nextInt(10);//0~9 범위의 난수값을 배열 요소에 저장
			}
			
			//규칙에 맞는 난수값인 경우에만 반복문 종료
			if(dap[0]!=0 && dap[0]!=dap[1] && dap[1]!=dap[2] && dap[2]!=dap[0])
            break;
		}
		
		Scanner scanner=new Scanner(System.in);

		//0~9 범위의 정수값 3개를 저장하기 위한 배열(키보드 입력값을 저장하기 위한 배열)
		int[] num=new int[3];
		
		//정답 관련 상태정보를 저장하기 위한 변수
		boolean result=false;

		//키보드로 정수값을 입력받기 위한 기회를 제공하는 반복문
		// → 키보드 입력값을 난수값과 비교하여 결과 출력
		for(int cnt=1;cnt<=15;cnt++) {
			//스트라이크와 볼의 갯수를 저장하기 위한 변수 선언
			int strike=0, ball=0;	

			//키보드 입력값에 대한 검증을 위한 반복문
			loop:
			while(true) {
				System.out.print(cnt+"번째 입력 >> ");
				String input=scanner.nextLine();
				
				if(input.length()!=3) {//비정상적인 값이 입력된 경우
					System.out.println("[에러]3자리의 숫자만 입력 가능합니다.");
					continue;
				}
				
				//입력된 문자열에서 문자를 추출하여 배열 요소에 저장
				// →문자열의 문자를 추출하여 정수값으로 변환하여 배열 요소에 저장
				for(int i=0;i<num.length;i++) {
					//정수값으로 지정한 문자코드(CharacterCode)-'0':48 ~'9':57
					//ex)'4'-'0'=4 즉,숫자 문자에 -'0'을 하면 추출된 문자는 정수값
					num[i]=input.charAt(i)-'0'; 
					
					if(num[i]<0 || num[i]>9) {//비정상적인 값이 입력된 경우
						System.out.println("[에러]숫자값만 입력 가능합니다.");
						continue loop;
					}
				}

				//규칙에 맞는 입력값인 경우에만 반복문 종료
				if(num[0]!=0 && num[0]!=num[1] && num[1]!=num[2] && num[2]!=num[0]) 
                break;
				
				System.out.println("[에러]0으로 시작되거나 중복된 숫자가 존재.");
			}
			
			//난수값과 키보드 입력값을 비교하여 스트라이크와 볼을 구분하여 계산
			// → 난수값과 키보드 입력값을 교차 비교하도록 중첩된 for 구문 사용
			for(int i=0;i<dap.length;i++) {//난수값을 처리하기 위한 반복문
				for(int j=0;j<num.length;j++) {//키보드 입력값을 처리하기 위한 반복문
					if(dap[i]==num[j]) {//배열의 요소값이 같은 경우
						if(i==j) {//배열 요소의 위치가 값은 경우
							strike++;
						} else {
							ball++;
						}
					}
				}
			}
			
			if(strike==3) {
				System.out.println("[메세지]"+cnt+"번만에 맞췄습니다.");
				result=true;
				break;
			}
			
			System.out.println("[결과]"+strike+"스트라이크 "+ball+"볼");
		}
		 
		if(!result) {//제공된 기회동안 정답을 맞추지 못한 경우
			System.out.print("[메세지]정답을 못 맞췄군요. 정답은 [");
			for(int su:dap) {
				System.out.print(su);
			}
			System.out.println("]입니다.");
		}

		scanner.close(); }}





📕 Date 클래스

  • Date 클래스 : 날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하기 위한 클래스

  • Date.toString() : Date 객체에 저장된 날짜와 시간을 문자열로 변환하여 반환하는 메소드

  • Date.getYear() : Date 객체에 저장된 날짜와 시간에서 [년]을 반환하는 메소드

    • 1900년부터 1씩 증가된 정수값 반환
  • Date.getMonth() : Date 객체에 저장된 날짜와 시간에서 [월]을 반환하는 메소드

    • 0 (1월) ~ 11 (12월) 범위의 정수값 반환
  • Date.getDate() : Date 객체에 저장된 날짜와 시간에서 [일]을 반환하는 메소드

  • Date.getDay() : Date 객체에 저장된 날짜와 시간에서 [요일]를 반환하는 메소드

    • 0(일) ~ 6(토) 범위의 정수값 반환
  • Date.getTime() : Date 객체에 저장된 날짜와 시간을 long 자료형의 정수값(TimeStamp)으로 반환하는 메소드

    • 타임스템프(TimeStamp) : 1970년 1월 1일을 기준으로 1ms마다 1씩 증가된 정수값
    • 날짜와 시간을 정수값으로 표현하여 연산하기 위해 사용
  • System.currentTimeMillis() : 시스템의 현재 날짜와 시간에 대한 타입스템프를 반환하는 메소드


🐣 예제


public class DateApp {
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		//Date 클래스의 객체를 생성하면 시스템의 현재 날짜와 시간이 저장된 객체 생성
		Date now=new Date();
		
		//Date.toString() : 문자열로 변환하여 반환하는 메소드(참조변수 출력시 자동 호출)
		//System.out.println("now.toString() = "+now.toString());
		System.out.println("now = "+now);
		
		//요일을 저장하기 위한 배열 선언
		String[] day={"일","월","화","수","목","금","토"};
		
		String printDate=(now.getYear()+1900)+"년 "+(now.getMonth()+1)+"월 "
				+now.getDate()+"일 "+day[now.getDay()]+"요일";
		System.out.println("현재 = "+printDate);
		
		//Date.getTime() : 날짜와 시간을 long 자료형의 정수값(TimeStamp)으로 반환
		//타임스템프(TimeStamp) : 1970년 1월 1일을 기준으로 1ms마다 1씩 증가된 정수값
		//long nowTime=now.getTime();
		
		//System.currentTimeMillis() : 시스템의 현재 날짜와 시간에 대한 타입스템프를 반환하는 메소드
		long nowTime=System.currentTimeMillis();
		System.out.println("nowTime = "+nowTime);
		
		//[2000년 1월 1일 0시 0분 0초]가 저장된 Date 객체 생성
		Date wantDate=new Date(100, 0, 1);
		System.out.println("wantDate = "+wantDate);
		
		long wantTime=wantDate.getTime();
		
		System.out.println("결과(일)="+((nowTime-wantTime)/1000)/86400); }}





📕 Calendar 클래스

  • 날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하기 위한 클래스

  • Calendar.getInstance() : 시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 생성하여 반환하는 메소드

  • Calendar.toString() : Calendar 객체에 저장된 날짜와 시간을 문자열로 반환하는 메소드

  • Calendar.get(int field) : Calendar 객체에 저장된 날짜와 시간에서 매개변수에 전달된 Calendar 클래스의 상수에 대한 값을 반환하는 메소드

    • [월]은 0~11 범위의 정수값으로 표현되며 [요일]은 1(일)~7(토) 범위의 정수값으로 표현
  • Calendar.set(int field, int value) : Calendar 객체에 날짜와 시간에서 매개변수로 전달된 Calendar 클래스의 상수에 대한 값을 변경하는 메소드

    • Calendar 객체에 저장된 날짜와 시간 중 [일]을 [1일]로 변경
  • Calendar.getActualMaximum(int field) : Calendar 객체에 저장된 날짜와 시간에서 매개변수에 전달된 Calendar 클래스의 상수에 대한 최대값을 반환하는 메소드


🐣 예제1 (현재)

public class CalendarApp {
	public static void main(String[] args) {
		//Calendar.getInstance() : Calendar 객체를 생성하여 반환하는 메소드
		Calendar calendar=Calendar.getInstance();
		
		//Calendar.toString() : 날짜와 시간을 문자열로 반환하는 메소드
		//System.out.println("calendar.toString() = "+calendar.toString());
		System.out.println("calendar = "+calendar);
		
		String[] day={"일","월","화","수","목","금","토"};
		
		//Calendar.get(int field):매개변수에 전달된 Calendar 클래스의 상수에 대한 값 반환
		// → [월]은 0~11 범위의 정수값, [요일]은 1(일)~7(토) 범위의 정수값으로 표현
		String printDate=calendar.get(Calendar.YEAR)+"년 "+
        (calendar.get(Calendar.MONTH)+1)+"월 "+calendar.get(Calendar.DATE)+"일"
        +day[calendar.get(Calendar.DAY_OF_WEEK)-1]+"요일";
		
		System.out.println("현재 = "+printDate); }}





🐣 예제2 (달력)

  • 현재 년월에 대한 달력을 출력하는 프로그램 작성

public class CurrentCalendarApp {
	public static void main(String[] args) {
		//시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 반환받아 저장
		Calendar calendar=Calendar.getInstance();
		
		//Calendar.set(int field, int value) : Calendar 클래스의 상수 값을 변경
		//Calendar 객체에 저장된 날짜와 시간 중 [일]을 [1일]로 변경
		calendar.set(Calendar.DATE, 1);
		
		//Calendar 객체의 [요일]을 반환받아 저장 (1(일)~7(토) 범위의 정수값 반환)
		int week=calendar.get(Calendar.DAY_OF_WEEK);
		
		System.out.println("         "+calendar.get(Calendar.YEAR)+"년 "
				+(calendar.get(Calendar.MONTH)+1)+"월");
		System.out.println("============================");
		System.out.println("  일  월  화  수  목  금  토");
		System.out.println("============================");
		
		//[1일]에 대한 요일전까지 공백 출력
		for(int i=1;i<week;i++) {
			System.out.print("    ");
		}
		
		//1일부터 [월]의 마지막 날짜까지 출력
		//Calendar.getActualMaximum(int field) : Calendar의 최대값을 반환
		for(int i=1;i<=calendar.getActualMaximum(Calendar.DATE);i++) {
			//날짜 출력 >> 자릿수 맞춤
			if(i<=9) {
				System.out.print("   "+i);
			} else {
				System.out.print("  "+i);
			}
			
			week++;//요일 증가
			
			if(week%7==1) {//증가된 요일이 일요일인 경우
				System.out.println();//토요일까지 출력되고 줄바꿈 처리
			}
		}
		System.out.println();
		System.out.println("============================");}}





🌼 java.text 패키지

  • 값을 변환하는 기능을 제공하는 클래스가 선언된 패키지

  • SimpleDateFormat : Date 객체와 String 객체를 서로 변환하기 위한 기능을 메소드로 제공하는 클래스

  • DecimalFormat : Number 객체(숫자값)와 String 객체를 서로 변환하기 위한 기능을 메소드로 제공하는 클래스


📙 SimpleDateFormat 클래스

  • Date 객체와 String 객체를 서로 변환하기 위한 기능을 메소드로 제공하는 클래스

  • SimpleDateFormat(String pattern) : 날짜와 시간에 대한 패턴정보가 저장된 SimpleDateFormat 객체를 생성하기 위한 생성자

    • 패턴정보 : 패턴문자를 이용하여 표현된 문자열
    • 패턴문자 : y(년), M(월), d(일), E(요일), AM|PM(오전|오후), H(시:24), h(시:12), m(분), s(초)
  • SimpleDateFormat.format(Date date) : 매개변수로 전달받은 Date 객체에 저장된 날짜와 시간을 SimpleDateFormat 객체에 저장된 패턴정보를 이용하여 문자열로 변환하여 반환하는 메소드

  • SimpleDateFormat.applyPattern(String pattern) : SimpleDateFormat 객체에 저장된 패턴정보를 변경하는 메소드

  • SimpleDateFormat.parse(String str) : SimpleDateFormat 객체에 저장된 패턴정보 형식의 문자열을 매개변수로 전달받아 Date 객체로 변환하여 반환하는 메소드

    • SimpleDateFormat 객체에 저장된 패턴정보와 일치하지 않는 문자열을 매개변수에 전달한 경우 ParseException 발생

🐣 예제

public class SimpleDateFormatApp {
	public static void main(String[] args) {
		Date now=new Date();
		
		//SimpleDateFormat(String pattern) : 날짜와 시간에 대한 패턴정보가 저장된 
		//SimpleDateFormat 객체를 생성하기 위한 생성자
		SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy년 MM월 dd일 E요일");
		
		//SimpleDateFormat.format(Date date) : 매개변수로 전달받은 Date 객체의 날짜와
        //시간을 SimpleDateFormat 객체에 저장된 패턴정보를 이용하여 문자열로 변환
		String printDate=dateFormat.format(now);//Date >> String
		
		System.out.println("현재 = "+printDate);
		
		//SimpleDateFormat.applyPattern(String pattern) : 패턴정보를 변경
		dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss");
		System.out.println("현재 = "+dateFormat.format(now));
		
		String want="2000-01-01 00:00:00";
		try {
			//SimpleDateFormat.parse(String str) : Date 객체로 변환
			// => SimpleDateFormat 패턴정보와 일치하지 않을 경우 ParseException 발생
			Date wantDate=dateFormat.parse(want);//String >> Date
			System.out.println("wantDate = "+wantDate);
		} catch (ParseException e) {
			System.out.println("[에러]형식에 맞지 않는 날짜와 시간입니다."); }}}





📙 DecimalFormat 클래스

  • Number 객체(숫자값)와 String 객체를 서로 변환하기 위한 기능을 메소드로 제공하는 클래스

  • DecimalFormat(String pattern) : 숫자값에 대한 패턴정보가 저장된 DecimalFormat 객체를 생성하기 위한 생성자

    • 패턴문자 : #(숫자 - 공백), 0(숫자 - 0), 콤마(,), 소숫점(.), 달러($)
  • DecimalFormat.format(long number) : 매개변수로 숫자값을 전달받아 DecimalFormat 객체에 저장된 패턴정보의 문자열로 변환하여 반환하는 메소드

  • DecimalFormat.getInstance() : 숫자값에 대한 기본 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드

  • DecimalFormat.getCurrencyInstance() : 숫자값에 대한 화폐단위가 포함된 기본 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드


🐣 예제

public class DecimalFormatApp {
	public static void main(String[] args) {
		//DecimalFormat(String pattern) : 숫자값에 대한 패턴정보가 저장된 객체 생성
		DecimalFormat decimalFormat=new DecimalFormat("###,###,##0");
		
		int money=100000000;
		System.out.println("금액 = "+money+"원");
		
		//DecimalFormat.format(long number) : DecimalFormat 패턴정보의 문자열로 변환
		System.out.println("금액 = "+decimalFormat.format(money)+"원");
		
		decimalFormat.applyPattern("$##,###,##0.00");
		System.out.println("금액 = "+decimalFormat.format(money));
		
		//DecimalFormat.getInstance() : 패턴정보가 저장된 DecimalFormat 객체를 반환
		System.out.println("금액 = "+DecimalFormat.getInstance().format(money));

		//DecimalFormat.getInstance() : 화폐단위가 포함된 기본 패턴정보가 저장된
		//DecimalFormat 객체를 반환하는 메소드
		System.out.println(DecimalFormat.getCurrencyInstance().format(money)); }}





🎀 연습문제1 (살아온 날짜)

  • 키보드로 생년월일을 입력받아 오늘까지 살아온 날짜(일)를 계산하여 출력하는 프로그램 작성
  • ex) 생년월일 입력[ex.2000-01-01] >> 2022-10-05
  • [결과] 태어난지 1일이 지났습니다.
  • 형식에 맞지 않는 생년월일을 입력한 경우 에러 메세지 출력 후 프로그램 종료

public class DayCalculateApp {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
		Date birthday=null;
		
		System.out.print("생년월일 입력[ex.2000-01-01] >> ");
		try {
			//키보드로 입력받은 문자열을 Date 객체로 변화하여 저장
			//입력받은 문자열이 SimpleDateFormat 객체에 저장된 패턴정보와 맞지 않을
			//경우 ParseException 발생 (일반 예외이므로 반드시 예외처리해야 에러 미발생)
			birthday=dateFormat.parse(scanner.nextLine());
		} catch (ParseException e) {
			System.out.println("[에러]생년월일을 형식에 맞게 입력해 주세요.");
			System.exit(0);
		} finally {
			scanner.close();
		}
		
		//살아온 날짜를 계산하여 출력
		long day=(System.currentTimeMillis()-birthday.getTime())/(1000*60*60*24);
		
		System.out.println("[결과]태어난지 "+day+"일이 지났습니다.");
	}
}





🎀 연습문제2 (달력)

  • 키보드로 [년]과 [월]을 입력받아 해당 년월에 대한 달력을 출력하는 프로그램 작성

public class WantCalendarApp {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		
		System.out.print("년 입력 >> ");
		int year=scanner.nextInt();
		
		System.out.print("월 입력 >> ");
		int month=scanner.nextInt();
		
		scanner.close();
		
		//시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 반환받아 저장
		Calendar calendar=Calendar.getInstance();
		
		//Calendar 객체에 저장된 날짜를 입력된 년월에 대한 1일로 변경
		// → 월은 0~11 범위의 정수값으로 처리되므로 입력값에서 1을 감소하여 변경
		calendar.set(year, month-1, 1);
		
		int week=calendar.get(Calendar.DAY_OF_WEEK);
		
		System.out.println();
		System.out.println("        "+year+"년 "+month+"월");
		System.out.println("============================");
		System.out.println("  일  월  화  수  목  금  토");
		System.out.println("============================");
		
		for(int i=1;i<week;i++) {
			System.out.print("    ");
		}
		
		for(int i=1;i<=calendar.getActualMaximum(Calendar.DATE);i++) {
			if(i<=9) {
				System.out.print("   "+i);
			} else {
				System.out.print("  "+i);
			}
			
			week++;
			
			if(week%7==1) {
				System.out.println();
			}
		}
		System.out.println();
		System.out.println("============================");
	}
}





profile
Study Log 📂

0개의 댓글

관련 채용 정보