자바12일차

달달한스위츠·2024년 2월 19일

자바배우기

목록 보기
12/43

오늘의 코드

package edu.java.date01;

import java.util.Date;

public class DateMain01 {

	public static void main(String[] args) {
		// 시스템의 현재 시간 정보
		Date date = new Date();
		System.out.println(date);
		System.out.println(date.getTime());
		// 1970년 1월 1일 0시 0분 0초를 기준(0)으로 삼아서
		// milli-second(1/1000초)마다 1씩 증가시킨 값
		
		System.out.println();
		Date date2 = new Date(0L); // 기준 시간으로 초기화
		System.out.println(date2);
		Date date3 = new Date(1000L); // 기준 시간 + 1초
		System.out.println(date3);
		
		
	} // end main()

} // end DateMain01
package edu.java.date02;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateMain02 {

	public static void main(String[] args) {
		// 날짜를 원하는 형식(format)으로 출력
		Date currentDate = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
		// yy or yyyy : 년도 표현
		// MM : 월 표현
		// dd : 일 표현
		// hh : 시간 표현
		// mm : 분 표현
		// ss : 초 표현
		String dateString = sdf.format(currentDate);
		System.out.println(dateString);
		
		sdf = new SimpleDateFormat("yy-MM-dd");
		dateString = sdf.format(currentDate);
		System.out.println(dateString);

	} // end main()

} // end DateMain02
package edu.java.date03;

import java.util.Calendar;

public class DateMain03 {

	public static void main(String[] args) {
		// Calendar : 추상 클래스
		// |_ GregorianCalendar : Calendar의 자식 클래스
		Calendar cal = Calendar.getInstance();
		
		System.out.println(cal);
		
		// 날짜와 시간 정보 추출
		int year = cal.get(Calendar.YEAR);
		System.out.println("year : " + year);
		
		int month = cal.get(Calendar.MONTH) + 1;
		System.out.println("month : " + month); // Month : 1월(0) ~ 12월(11)
		
		int day = cal.get(Calendar.DAY_OF_MONTH); 
		System.out.println("day : " + day); // DAY : 1 ~ 31
		
		int hour = cal.get(Calendar.HOUR_OF_DAY); 
		System.out.println("hour : " + hour);
		// HOUR : 12시간 단위, HOUR_OF_DAY : 24시간 단위
		
		int minute = cal.get(Calendar.MINUTE);
		System.out.println("minute : " + minute);
		
		int second = cal.get(Calendar.SECOND);
		System.out.println("second : " + second);
		
		String dateString = String.format("%d/%d/%d %d:%d:%d", 
				year, month, day, hour, minute, second);
		System.out.println(dateString);

	} // end main()

} // end DateMain03
package edu.java.date04;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateMain04 {

	public static void main(String[] args) {
		Calendar cal = new GregorianCalendar(2023, 1, 6);
		
		int year = cal.get(Calendar.YEAR);
		int month = cal.get(Calendar.MONTH) + 1;
		int day = cal.get(Calendar.DAY_OF_MONTH);
		String str = String.format("%d-%02d-%02d", year, month, day);
		System.out.println(str);
		
		System.out.println();
		// Calendar를 SimpleDateFormat으로 표현
		Calendar birth = new GregorianCalendar(1900, 0, 1);
		
		// 코드 한줄 작성
		Date date = birth.getTime();
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
		String birthString = sdf.format(date);
		System.out.println(birthString);
				
	} // end main()

} // end DateMain04
package edu.java.homework;

//Homework04_1.java 생성하여 풀이
//다음 문자열에서 숫자들을 구분하여 합을 구하시오.
//String str = "2024년 02월 19일 16:37:53";

public class Homework05_1 {

	public static void main(String[] args) {
		String str = "2024년 02월 19일 16:37:53";
		
		String[] result = str.split(" |년 |월 |일 |:");
		int sum = 0;
		for(int i=0; i < result.length; i++) {
                sum += Integer.parseInt(result[i]);
		}
		System.out.println(sum);
	}

}
package edu.java.homework;
//Homework04_2.java 클래스 생성 : 혼자 공부하는 자바. Chapter 11. 확인 문제 7번 
//다음 문자열에서 "자바"문자열이 포함되어 있는지 확인하고, "자바"를
//"Java"로 대치한 새로운 문자열을 만들어보세요.
//"모든 프로그램은 자바 언어로 개발될 수 있다."
//-> "모든 프로그램은 Java 언어로 개발될 수 있다."
public class Homework05_2 {

	public static void main(String[] args) {
		String str = "모든 프로그램은 자바 언어로 개발될 수 있다.";
		
		int index = str.indexOf("자바"); // 문자 찾기
		
		if(index == -1) {
			System.out.println("자바 문자열이 포함되어 있지 않습니다.");
		} else {
			System.out.println("자바 문자열이 포함되어 있습니다.");
			str = str.replace("자바", "Java");
			System.out.println("->" + str);
		}

	}

}
package edu.java.string01;

// API(Application Programming Interface)
// - 프로그램 언어나 운영 체제가 제공하는 기능을 사용할 수 있게 만든 인터페이스
public class StringMain01 {

	public static void main(String[] args) {
		String str1 = "안녕하세요"; // 문자열 상수: 기본타입
		System.out.println(str1);
		
		String str2 = new String("안녕하세요"); // 참조타입, 인스턴스 생성
				System.out.println(str2);
		
		if(str1 == str2) { // 주소가 다르기 때문에 다른 참조라고 뜸
			System.out.println("같은 참조");
		} else {
			System.out.println("다른 참조");
		}
		
		// String을 저장하는 참조 변수에는 문자열이 있는 주소값이 저장됨
		// 비교연산자(==, !=) 단순 주소값만 비교
		// -> 실제 문자열의 내용이 같더라도 '다른 참조'라는 결과를 줄 수 있음
		// 따라서, 문자열의 내용이 같은지 다른지 비교할 때는 equals() 메소드 사용
		
		if(str1.equals(str2)) { // equals사용으로 같은 참조라고 뜸
			System.out.println("같은 참조");
		} else {
			System.out.println("다른 참조");
		}
		
		
		

	} // end main()

} // end StringMain01
package edu.java.string02;

public class StringMain02 {

	public static void main(String[] args) {
		// length() : 문자열의 길이를 리턴
		String str1 = "abc";
		String str2 = "Hello";
		System.out.println(str1.length());
		System.out.println(str2.length());
		
		System.out.println("----------------------");
		// equals() : 문자열의 내용을 비교
		System.out.println(str1.equals(str2));
		
		System.out.println("----------------------");
		String str3 = "hello";
		String str4 = "Hello";
		System.out.println(str3.equals(str4));
		System.out.println(str3.equalsIgnoreCase(str4));
		
		System.out.println("----------------------");
		// charAt() : 문자열 중에서 해당 인덱스의 문자 하나를 리턴
		System.out.println(str3.charAt(1));
		
		System.out.println("----------------------");
		// indexOf() : 해당 문자 또는 문자열이 처음으로 등장하는 인덱스를 리턴
		//             해당 문자 또는 문자열이 없으면 -1을 리턴
		// lastIndexOf() : 문자 또는 문자열이 가장 마지막으로 등장하는 인덱스를 리턴
		String str5 = "Hello, world!";
		System.out.println(str5.indexOf("l"));
		System.out.println(str5.indexOf("world"));
		System.out.println(str5.lastIndexOf("l"));
		
		System.out.println("----------------------");
		// startWith() : 해당 문자열로 시작하는지 아닌지 확인
		String str6 = "https://www.google.com";
		System.out.println(str6.startsWith("https://")); // prefix = 접두어
		
		System.out.println("----------------------");
		// contains() : 해당문자열이 포함하는지 아닌지
		System.out.println(str6.contains("google")); // 필터링에 많이 사용이 된다.
		
		System.out.println("----------------------");
		// split() : 문자열을 특정 기준(구분자)으로 나눠서 배열을 리턴
		String str7 = "2024.02.19";
		String[] result = str7.split("\\."); // 프로그램 내부에서 특별한 역활을 하는 친구들은 결코 그냥 사용하면 안된다.
		// 특수기호(.$()[{^?*+\\) 사용은 기호 앞에 "\\"를 붙여주어야 함(전기기호)
		for(String x : result) {
			System.out.println(x); // 아무 것도 안뜨는 이유 : 위에 있음(해결은 백슬래이스 2개 넣어라)
		}
		
		String str8 = "C:\\Program Files\\test folder";
		result = str8.split("\\\\| |:");
		for(String x : result) {
			System.out.println(x);
		}
		
		String str9 = "2024-02-19 11:30:42";
		// 퀴즈) 위 문자열을 "2024", "02", "19", "11, "30", "42"
		// 로 나누기 나눈 데이터를 활용하여
		// 월 데이터가 1월 ~ 6월이면 "상반기", 7 ~ 12월이면 "하반기"
		// 가 출력되도록 코드 작성
		result = str9.split("-| |:");
		int month = Integer.parseInt(result[1]); // 문자열을 숫자로 변환
		if(month >= 1 && month <= 6) {
			System.out.println("상반기");
		} else {
			System.out.println("하반기");
		}
		for(String x : result) {
			System.out.println(x);
		}
		
		System.out.println("----------------------");
		// compareTo() : 해당 문자열과 비교해서 서로 다른 문자의 개수 리턴
		// compareIgnoreCase() : 해당 문자열과 대소문자 구분없이
		//                       비교 후 서로 다른 문자의 개수 리턴
		String str10 = "abc";
		String str11 = "bbc";
		System.out.println(str10.compareTo("abc"));
		System.out.println(str10.compareTo("ab"));
		System.out.println(str10.compareTo("a"));
		System.out.println(str10.compareTo("b"));
		System.out.println(str10.compareTo(str11));
//		첫 번째 문자열이 두 번째 문자열보다 사전 순으로 앞에 온다는 것을 의미합니다. 이는 첫 번째 문자열이 두 번째 문자열보다 작다는 것을 나타냅니다.
		
		System.out.println("----------------------");
		// toUpperCase() : 문자열을 대문자로 변경
		// toLowerCase() : 문자열을 소문자로 변경
		String str12 = "Hello, Java!";
		System.out.println(str12.toUpperCase());
		System.out.println(str12.toLowerCase());
		
		System.out.println("----------------------");
		// substring(begin, end) : begin부터 end까지 문자열을 리턴
		// begin 인덱스는 포함, end 인덱스는 포함되지 않음
		System.out.println(str12.substring(0, 5)); // 즉! 0 <= index < 5 라는 뜻이다.
		int begin = str12.indexOf("J"); // 변하는 형태를 맞추기 위한 방법
		int end = str12.length();
		System.out.println(str12.substring(begin, end));
		// 글자가 동적으로 바뀌면 에러가 발생한다.(하드 코딩의 또다른 문제점) - 에러) 없는 인덱스에 참조해서 애러가 난다.
		// 아까는 됬는 데 지금은 안되요 같은 건 없다 그냥 안되는 것이지
		
		System.out.println("----------------------");
		// concat() : 문자열을 이어주는 메소드
		System.out.println(str12.concat(" World!"));
		
		System.out.println("----------------------");
		// replace(A, B) : A문자열을 B로 변경
		String str13 = str12.replace("Java", "c++");
		System.out.println(str13);
		// 어떤 문자를 찾아가지고 다른 문자로 바꾸어 주는 것
		
		
		
		
	} // end main()

} // end StringMain02
package edu.java.string03;

// String 클래스 : immutable 클래스(내용이 바뀌지 않는 클래스)
// StringBuffer, StringBuilder : mutable 클래스(내용을 바꿀 수 있는 클래스)

// StringBuffer : Java 1.0 버전부터 사용된 클래스
// - 추가/삭제 속도가 느림
// - Thread-safe : 쓰레드에 안전한 클래스
// - 멀티쓰레드 환경에서 사용학시 적합

// StringBuilder : Java 5.0 버전부터 사용된 클래스
// - 추가/삭제 속도가 빠름
// - Thread-unsafe : 쓰레드에 안전하지 않는 클래스
// - 싱글쓰레드 환경에서 사용하기 적합
// 그 외 모든 기능이 동일(동일한 기능의 메소드들을 가지고 있음)
public class StringMain03 {

	public static void main(String[] args) {
		// StringBuffer, StringBuilder 클래스
		StringBuffer buffer = new StringBuffer("abc");
//		StringBuffer buff = "abc"; // 컴파일 에러(무조건 new로 구현해햐 함)
		
		System.out.println(buffer);
		System.out.println(System.identityHashCode(buffer));
		System.out.println(buffer.hashCode()); // 위랑 같은 코드
		
		// append() : 문자열을 덧붙이는 메소드
		buffer.append("def").append("ghi");
		System.out.println(buffer);
		System.out.println(System.identityHashCode(buffer));
		System.out.println(buffer.hashCode());
		
		System.out.println();
		String str = "abc";
		System.out.println(str);
		System.out.println(System.identityHashCode(str));
		System.out.println(str.hashCode());
		
		System.out.println();
		str = str + "";
		System.out.println(str);
		System.out.println(System.identityHashCode(str));
		System.out.println(str.hashCode());
		
		System.out.println(System.identityHashCode("abc"));
		System.out.println(System.identityHashCode("abc".concat(str)));
		
		
		
		
	} // end main()

} // end StringMain03
package edu.java.string04;

import java.util.Scanner;
import java.util.regex.Pattern;

public class StringMain04 {

	public static void main(String[] args) {
		System.out.println("정규표현식 연습");
		
		Scanner sc = new Scanner(System.in);
		
		String data = sc.next();
		
		String regExp = "(02|032|010)-\\d{3,4}-\\d{4}";
		
		// (02|032|010) : 02 또는 032 또는 010으로 시작
		// - : '-' 기호 확인
		// \d{3,4} : 3 ~ 4자리의 숫자
		// \d{4} : 4자리의 숫자
		
		boolean result = Pattern.matches(regExp, data);
		if(result) {
			System.out.println("정상적인 전화번호입니다.");
		} else {
			System.out.println("잘못된 전화번호입니다.");
		}
		
		data = sc.next();
		regExp = "\\w+@\\w+\\.\\w+(\\.\\w+)?";
		// \w+ : 한 개 이상의 알파벳 또는 숫자
		// @ : @가 존재하는지
		// \w+ : 한 개 이상의 알파펫 또는 숫자
		// \. : .가 존재하는지
		// \w+ : 한 개 이상의 알파벳 또는 숫자
		// (\.\w+)? : \.\w+가 없거나 한 번 더 올 수 있음
		result = Pattern.matches(regExp, data);
		if(result) {
			System.out.println("정상적인 이메일입니다.");
		} else {
			System.out.println("정상적인 이메일입니다.");
		}
		
		
	} // end main()

} // end StringMain04
package edu.java.wrapper01;

//Wrapper 클래스 : 자바의 기본 데이터 타입을 감싸는 클래스
//- 기본 자료형 : boolean, byte, short, int, long, char, float, double
//- Wrapper 클래스 : 
//		Boolean, Byte, Short, Integer, Long, Character, Float, Double
//- Wrapper 클래스를 사용하는 이유 :
//		1. 클래스의 메소드(기능), 상수(public static final)을 사용하기 위해서
//		2. 매개변수 Object를 갖는 메소드의 인자값으로 사용하기 위해서
//		3. 컬렉션 프레임워크에서 사용하기 위해서
public class WrapperMain01 {

	public static void main(String[] args) {
		// Wrapper 클래스의 상수
		System.out.println("byte 타입의 최소값 : " + Byte.MIN_VALUE);
		System.out.println("byte 타입의 최대값 : " + Byte.MAX_VALUE);
		System.out.println("int 타입의 최소값 : " + Integer.MIN_VALUE);
		System.out.println("int 타입의 최대값 : " + Integer.MAX_VALUE);
		
		System.out.println();
		int n1 = 123;
//		Integer num1 = new Integer(123);
		Integer num1 = 123; // 할 수 있는 건 훨씬 강력하지만 무겁다.(마치 로켓)
		System.out.println("num1 = " + num1);
		
		int value1 = num1;
		System.out.println("value1 = " + value1);
		
		// valueOf() 메소드
		Integer num3 = Integer.valueOf(100);
		System.out.println("num3 = " + num3);
		
		Double num4 = Double.valueOf(3.14);
		System.out.println("num4 = " + num4);
		
		Integer num5 = Integer.valueOf("200");
		// 문자열 형태의 '숫자'를 Integer 타입의 변수에 저장
		System.out.println("num3 = " + num5);
		
		System.out.println();
		// parseXxx() :
		// 문자열을 전달받아서, 기본 자료형으로 리턴해주는 메소드
		int x = Integer.parseInt("12345");
		System.out.println("x = " + x);
		
		double y = Double.parseDouble("3.141592");
		System.out.println("y = " + y);
		
		
		
	} // end main()

} // end WrapperMain01
package edu.java.wrapper02;

public class WrapperMain02 {

	public static void main(String[] args) {
		Integer x = new Integer(100); // boxing(포장)
		Integer y = new Integer(200);
		
		int add = x.intValue() + y.intValue();
		System.out.println("add = " + add);
		int add2 = x + y; // auto unboxing
		
		System.out.println("add2 = " + add2);
	}

}
package edu.java.wrapper03;

import java.math.BigInteger;

//BigInteger : 저장할 수 있는 정수값의 한계가 없는 클래스
//BigDecimal : 실수 계산의 오차를 줄이거나 없애기 위해서 만들어진 클래스
//auto boxing과 auto unboxing 기능을 제공하지 않음
//-> 생성자를 호출하여 인스턴스를 생성해야함
//-> 산술연산(+, - *, / 등등)은 메소드를 사용해야함

public class WrapperMain03 {

	public static void main(String[] args) {
		long n = Long.MAX_VALUE +1;
		System.out.println(n);
		// long 타입도 저장할 수 있는 한계가 존재
		
		// BigInteger 생성자의 매개변수는 문자열
		BigInteger big = new BigInteger("123456789123456798123456");
		System.out.println(big);
		
		// BigInteger의 사칙연산 : 
		// add(), subtract(), multiply(), divide(), mod() 메소드 사용
		BigInteger x = new BigInteger("10");
		System.out.println(big.add(x));
		
		
		
	}

}

0개의 댓글