오늘의 코드
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));
}
}