-
Calendar API / StringBuilder프로그래밍/JAVA 자바 2021. 7. 21.반응형
StringBuilder
package ex0720; public class Ex01_String { public static void main(String[] args) { String s; s = "자바" + ", 스프링" + ", 오라클" + ", HTML"; // 내부적으로 StringBuilder를 사용하므로 성능이 더 우수함 /* * s = "자바"; * s += ", 스프링"; * 이런건 성능이 매우 안좋음 */ StringBuffer sb = new StringBuffer(); sb.append("자바"); sb.append(", 스프링"); sb.append(", 오라클"); sb.append(", HTML"); System.out.println(s); System.out.println(sb); } }
append는 맨 뒤에 추가해준다.
package ex0720; public class Ex02_StringBuilder { public static void main(String[] args) { // TODO Auto-generated method stub StringBuilder sb = new StringBuilder(); sb.append("seoul"); //대문자로 변경 하고 싶음 String s = sb.toString().toUpperCase(); //String으로 바꿔주고 대문자로 변경 System.out.println(s); // seoul 뒤에 부산 추가 sb.append("우리나라"); sb.append("대한민국"); sb.append("부산"); System.out.println(sb); // seoul 앞에 "한국" 추가 sb.insert(0, "한국"); System.out.println(sb); // seoul 위치 System.out.println(sb.indexOf("seoul")); // seoul 뒤에 인천 추가 sb.insert(sb.indexOf("seoul")+"seoul".length(), "인천"); System.out.println(sb); // 대한민국 삭제 : delete(s, e) -> s인덱스에서 e-1 인덱스까지 삭제 sb.delete(sb.indexOf("대한민국"), sb.indexOf("대한민국")+"대한민국".length()); System.out.println(sb); //우리나라부터 끝까지 전부 삭제 sb.delete(sb.indexOf("우리나라"), sb.length()); System.out.println(sb); //그냥 모두 삭제 sb.delete(0, sb.length()); System.out.println(sb.length()); System.out.println(sb); } }
insert( , )
콤마앞 위치(인덱스)에 뒤 콤마 내용을 넣는다.
임시 패스워드 만들기
package ex0720; public class Ex03_StringBuilder { public static void main(String[] args) { // 임시 패스워드 만들기 Test3 tt = new Test3(); String s; s = tt.generatePwd(); System.out.println(s); s = tt.generatePwd(); System.out.println(s); } } class Test3 { // 10자리 임시 패스워드 만들기 (대문자, 소문자, 특수문자, 숫자 조합) public String generatePwd() { StringBuilder pw = new StringBuilder(); String s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*-+abcdefghijklmnopqrstuvwxyz"; int n; //char c; for(int i=0; i<10; i++) { //c = (char)(Math.random()*(126-33)+33); //pw.append(c); n = (int)(Math.random()* s.length()); pw.append(s.substring(n, n+1)); } return pw.toString(); } }
StringTokenizer
package ex0720; import java.util.StringTokenizer; public class Ex04_StringTokenizer { public static void main(String[] args) { // 문자열 구분하기 split이 더 편하다. String str; String [] ss; int n; str = "자바,안드로이드,HTML,스프링,오라클,javascript,JPA"; // 문자열을 토큰으로 구분하여 파싱 //StringTokenizer st = new StringTokenizer(str, ","); // 구분자는 출력하지 않음(기본) StringTokenizer st = new StringTokenizer(str, ",", true); // 구분자도(콤마) 문자열로 파싱 ss = new String[st.countTokens()]; // countTokens() : 파싱할 문자열의 총 수 n = 0; while(st.hasMoreTokens()) { ss[n++] = st.nextToken(); } System.out.println("파싱된 문자열..."); for(int i=0; i<ss.length; i++) { System.out.println(ss[i]); } } }
Calendar
package ex0720; import java.util.Calendar; public class Ex05_Calendar { public static void main(String[] args) { // Calendar 클래스 : 추상 클래스(미완성 클래스)로 직접 객체 생성 불가 그래서 getInstance 사용 // 현재 시스템 날짜를 이용하여 Calendar 객체 생성 Calendar cal = Calendar.getInstance(); // %tF : 년-월-일 // %tA : 요일 // %tT : 시간(시:분:초) //String s = String.format("%tF %tA %tT", cal, cal, cal); String s = String.format("%1$tF %1$tA %1$tT", cal); System.out.println(s); int y = cal.get(Calendar.YEAR); int m = cal.get(Calendar.MONTH) + 1; // 0~11 int d = cal.get(Calendar.DATE); int w = cal.get(Calendar.DAY_OF_WEEK); // 1~7 int end = cal.getActualMaximum(Calendar.DATE); System.out.println(y+"년 "+m+"월 "+d+"일"); System.out.println("요일(1:일 ~ 7:토) : " + w); System.out.println("이번달 마지막 날짜 : " + end); // 2021년 8월 5일로 날짜 변경 cal.set(2021, 8-1, 5); //1월은 0이니까 7이 8월이다. System.out.printf("%tF\n", cal); // 2021년 5월 32일로 날짜 변경 cal.set(2021, 5-1, 32); System.out.printf("%tF\n", cal); // 2021-06-01 // 2021-08-10일 부터 100일후는 ? cal.set(2021, 8-1, 10); cal.add(Calendar.DATE, 100); // 날짜를 100일 더한다. System.out.printf("%tF\n", cal); } }
날짜를 입력 받아 요일을 출력하기
입력 방식 2021-07-20
답 2021-07-20은 일요일 입니다.
입력 받은 날짜형식이 yyyy-mm-dd 형식이 아니면 재입력package ex0720; import java.util.Calendar; import java.util.Scanner; public class Ex06_Calendar { public static void main(String[] args) { // 날짜를 입력 받아 요일을 출력하기 // 입력 방식 2021-07-20 // 답 2021-07-20은 일요일 입니다. // 입력 받은 날짜형식이 yyyy-mm-dd 형식이 아니면 재입력 Scanner sc = new Scanner(System.in); String input; do { System.out.println("날짜 입력 : "); input = sc.next(); } while(! input.matches("^(\\d{4}-\\d{2}-\\d{2})$")); String [] ss = input.split("-"); int y = Integer.parseInt(ss[0]); int m = Integer.parseInt(ss[1]); int d = Integer.parseInt(ss[2]); String week; Calendar cal = Calendar.getInstance(); cal.set(y, m-1, d); System.out.printf("%tF는 %tA 입니다. \n", cal, cal); y = cal.get(Calendar.YEAR); m = cal.get(Calendar.MONTH)+1; d = cal.get(Calendar.DATE); week = String.format("%tA", cal); System.out.printf("%04d-%02d-%02d는 %s 입니다.\n", y,m,d,week); System.out.println("--------------------------"); String [] ww = new String[] {"일","월","화","수","목","금","토",}; week = ww[cal.get(Calendar.DAY_OF_WEEK)-1]; System.out.println("요일은 "+week+"입니다."); System.out.println("--------------------------"); sc.close(); } }
^(\\d{4}-\\d{2}-\\d{2})$
시작 ^
끝 $
숫자 형식에 4자리 2자리 2자리 이여야 한다
중간에 - 도 있음
package ex0720; import java.util.Calendar; public class Ex08_Calendar { public static void main(String[] args) { // TODO Auto-generated method stub Calendar cal = Calendar.getInstance(); //cal.set(2021, 5-1, 1); cal.set(Calendar.YEAR, 2021); cal.set(Calendar.MONTH, 7-1); cal.set(Calendar.DATE, 1); System.out.printf("%tF\n", cal); cal.set(Calendar.DAY_OF_WEEK,1); // 요일을 일요일로 설정 // 현재 시스템 날짜가 있는 주의 일요일이 출력됨(시스템 날짜와 동일한 년월을 설정하고 일자가 다른 경우) // set() 메소드는 Calendar의 필드 값은 변경되지만 Calendar의 시간 값(실제 날짜)은 변경되지 않는다. // set() 메소드를 여러번 호출해도 불필요한 계산을 하지 않는다. - 성능 향상을 위해 // set() 메소드 호출 후 시간값을 변경하기 위해서는 getTime(), getTimeInMills(), add() // 등의 메소드를 호출해야 시간 값이 변경된다. System.out.printf("%tF\n", cal); System.out.println("-----------------------\n"); Calendar cal2 = Calendar.getInstance(); cal2.set(Calendar.YEAR, 2021); cal2.set(Calendar.MONTH,7-1); cal2.set(Calendar.DATE,1); System.out.printf("%tF\n", cal2); cal2.getTime(); // 또는 cal2.get(Calendar.YEAR); // 실제 시간 값이 변경 됨 cal2.set(Calendar.DAY_OF_WEEK,1); System.out.printf("%tF\n", cal2); } }
cal.set(Calendar.DAY_OF_WEEK,1); // 요일을 일요일로 설정
달력 만들기
package ex0720; import java.util.Calendar; import java.util.Scanner; public class Ex09_Claendar { public static void main(String[] args) { // 달력 만들기 Scanner sc = new Scanner(System.in); Calendar cal = Calendar.getInstance(); String[]week = new String[] {"일","월","화","수","목","금","토"}; int y,m,w,lastDay; System.out.print("년도 ? "); y = sc.nextInt(); do { System.out.print("월 ?"); m = sc.nextInt(); } while(m<1 || m>12); cal.set(y, m-1, 1); //날짜를 y년도 m월 1일로 설정 w = cal.get(Calendar.DAY_OF_WEEK); //요일을 구함 1일의 요일 lastDay = cal.getActualMaximum(Calendar.DATE); //월의 마지막 날짜 System.out.println("\t"+y+"년"+m+"월"); for(int i=0; i<week.length; i++) { System.out.printf("%4s", week[i]); } System.out.println(); System.out.println("-----------------------------"); for(int i=1; i<w; i++) { System.out.print(" "); } for(int i=1; i<=lastDay; i++) { System.out.printf("%4d",i); if(++w % 7 ==1) { System.out.println(); } } if(w%7 != 1) { System.out.println(); } System.out.println("-----------------------------"); sc.close(); } }
주의 시작일자와 주의 마지막 일자 구하기
package ex0720; import java.util.Calendar; public class Ex10_Calendar { public static void main(String[] args) { // 주의 시작일자와 주의 마지막 일자 구하기 Calendar cal = Calendar.getInstance(); cal.set(2021, 7-1, 20); cal.getTime(); // set()으로 날짜를 변경 후에는 get() 관련 메소를 호출해야 실제 시간이 변경된다. System.out.printf("%tF %tA\n", cal,cal); /* //날짜 복제 Calendar cal2 = (Calendar)cal.clone(); // 날짜 복제 cal2.set(Calendar.DAY_OF_WEEK, 1); // 주의 일요일로 설정 System.out.printf("주 시작일 : %tF %tA\n",cal2,cal2); Calendar cal3 = (Calendar)cal.clone(); // 날짜 복제 cal3.set(Calendar.DAY_OF_WEEK, 7); // 주의 토요일로 설정 System.out.printf("주 시작일 : %tF %tA\n",cal3,cal3); */ // 방법 - 2 int n; Calendar cal2 = (Calendar)cal.clone(); // 날짜 복제 n = cal.get(Calendar.DAY_OF_WEEK); cal2.add(Calendar.DAY_OF_MONTH, -(n-1) ); System.out.printf("주 시작일 : %tF %tA\n",cal2, cal2); Calendar cal3 = (Calendar)cal.clone(); // 날짜 복제 n = cal.get(Calendar.DAY_OF_WEEK); cal3.add(Calendar.DAY_OF_MONTH, (7-n) ); System.out.printf("주 마지막일 : %tF %tA\n", cal3, cal3); } }
cal.set(2021, 7-1, 20);
cal.getTime(); // set()으로 날짜를 변경 후에는 get() 관련 메소를 호출해야 실제 시간이 변경된다.생년월일을 입력 받아 나이 계산하기 (날짜를 정확히 입력 했다는 가정하에)
package ex0720; import java.util.Calendar; import java.util.Scanner; public class Ex11_Calendar { public static void main(String[] args) { // 생년월일을 입력 받아 나이 계산하기 (날짜를 정확히 입력 했다는 가정하에) Scanner sc = new Scanner(System.in); String birth; int age; // 200-10-10 2000.10.10 2000/10/10 do { System.out.print("생년월일 ? "); birth = sc.next(); birth = birth.replaceAll("(\\-|\\/|\\.)", ""); } while(! birth.matches("^(\\d{8})$")); int y = Integer.parseInt(birth.substring(0, 4)); int m = Integer.parseInt(birth.substring(4, 6)); int d = Integer.parseInt(birth.substring(6)); Calendar now = Calendar.getInstance(); // 나이 계산 age = now.get(Calendar.YEAR) - y; if(m > now.get(Calendar.MONTH) || (m == now.get(Calendar.MONTH) && d > now.get(Calendar.DAY_OF_MONTH))) { age--; } System.out.println("나이 : " + age); sc.close(); } }
package ex0720; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Ex13_Calendar { public static void main(String[] args) { // TODO Auto-generated method stub Date date = new Date(); // 현재 시스템의 시간으로 Date 객체 생성 System.out.println(); // Tue Jul 20 15:06:16 KST 2021 /* // 권장 하지 않음(사용하지 말것을 권장함) int y = date.getYear()+1900; int m = date.getMonth()+1; int d = date.getDate(); System.out.println(y+"-"+m+"-"+d); */ // 1970년 1월 1일 0시 0분 0초를 기준으로 밀리 초 단위로 환산하여 반환 long t = date.getTime(); System.out.println(t); Date date2 = new Date(1626761750391L); System.out.println(date2); // date 객체의 날짜가 data2의 객체 값보다 이후 날짜인지 변환 System.out.println(date.after(date2)); // Date 객체의 날짜를 문자열로 출력하기 // SimpleDateFormat : 문자열 <-> Date SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 HH:mm:ss"); String str = sdf.format(date); System.out.println(str); //문자열을 Date로 변환 str = "2000-10-07"; SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); //str이랑 형식이 같아야함 try { //예외를 내포하고 있는 코드 Date date3 = sdf2.parse(str); String s = sdf.format(date3); System.out.println(s); } catch (ParseException e) { // 예외가 발생할 때 실행할 코드 e.printStackTrace(); } } }
try - catch 문
파이썬으로 따지면 try - except랑 같은 개념이다.
Date
package ex0720; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Ex14_Date { public static void main(String[] args) { // 홍길동은 2021-03-05일 여자친구와 만나기 시작했다. 오늘까지 몇일인지 날수 출력 Date date = new Date(); String str = "2021-03-05"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { Date date2 = sdf.parse(str); // 두 날짜 사이의 간격 long dif = (date.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000); //두 날짜의 차이는 밀리세컨이니까 그걸 일자로 바까야해서 뒤에 수식이 붙는다 System.out.println("만난지 "+dif+"일"); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 홍길동은 2020년 10월 10일에 태어났다, 오늘까지 몇일을 살았나 try { str = "1995-12-18"; Date date2 = sdf.parse(str); // 두 날짜 사이의 간격 long dif = (date.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000); //두 날짜의 차이는 밀리세컨이니까 그걸 일자로 바까야해서 뒤에 수식이 붙는다 System.out.println("살아온지 "+dif+"일"); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package ex0720; import java.util.Calendar; public class Ex15_Date { public static void main(String[] args) { // TODO Auto-generated method stub Calendar cal = Calendar.getInstance(); System.out.printf("%tF\n", cal); // 2021-07-20 // Calendar >> java.util.Date 로 변환 java.util.Date date1 = cal.getTime(); System.out.println(date1); // java.util.Date를 java.sql.Date로 변환 // java.sql.Date : DB에 날짜를 저장하거나 DB에 저장된 날짜를 추출할때 사용 // yyyy-MM-dd 형식으로 출력 java.sql.Date date2 = new java.sql.Date(date1.getTime()); System.out.println(date2); // java.util.Date >> Calendar cal.setTime(date1); System.out.printf("%tF\n", cal); //2021-07-20 } }
Math
package ex0720; public class Ex16_Math { public static void main(String[] args) { // 크거나 같은 정수중 가장 적은 정수 System.out.println(Math.ceil(10.5)); // 11.0 System.out.println(Math.ceil(-10.5)); // -10.0 // 적거나 같은 정수중 가장 큰 정수 System.out.println(Math.floor(10.5)); //10 double a; // sin 30도 a = Math.sin(30 * Math.PI / 180); //라디안 System.out.println(a); a = Math.sqrt(2.0); // 제곱근 System.out.println(a); a = Math.pow(2, 10); // 2의 10승 System.out.println(a); a = Math.random(); // 0<=수<1 사이의 난수 System.out.println(a); } }
Random
package ex0720; import java.util.Random; public class Ex17_Random { public static void main(String[] args) { // TODO Auto-generated method stub Random rd = new Random(); int n; for(int i=1; i<=100; i++) { n = rd.nextInt(100); // 0~99 사이의 난수 System.out.printf("%5d", n); if(i%10 == 0) System.out.println(); } System.out.println("------------------------"); String s = number5(); System.out.println("다섯자리 난수 : " + s); System.out.println("------------------------"); String f = number3(); System.out.println("세자리 난수 : " + f); } //5자리 난수 public static String number5() { StringBuilder sb = new StringBuilder(); int n; Random rd = new Random(); for(int i=0; i<5; i++) { n = rd.nextInt(10); sb.append(Integer.toString(n)); } return sb.toString(); } //서로 다른 3자리 난수(123~987) public static String number3() { StringBuilder sb = new StringBuilder(); String n; Random rd = new Random(); for(int i=0; i<3; i++) { n = Integer.toString(rd.nextInt(9)+1); if(sb.indexOf(n) >= 0) { i--; continue; } sb.append(n); } return sb.toString(); } }
반응형'프로그래밍 > JAVA 자바' 카테고리의 다른 글
Calendar 클래스 / 날짜 형식이 올바른지 판단하기 (0) 2021.07.22 기타 API (0) 2021.07.22 자바의 기본 API 클래스 (String, 기본) (0) 2021.07.20 접근 제한자 / 성적 처리 코드 (0) 2021.07.19 참조 변수/ 생성자 / 생성자의 this문 / getter setter (0) 2021.07.16