romworld

API 클래스 본문

JAVA/개념정리

API 클래스

inderrom 2022. 10. 10. 01:15
package g_api;

public class StringSpeedTest {

	// 문자열을 사용하는 방법에는 String 객체와 StringBuffer 객체가 있다.
	// 다양한 장단점이 있지만 속도만 보자
	
	public static void main(String[] args) {
		String str = "a";
		
		long start = System.currentTimeMillis();
		for(int i = 0; i < 20000; i++) {
			str += "a";
		}
		long end = System.currentTimeMillis();
		System.out.println("String 객체 : " + (end - start) + "ms");
		
		// 속도가 훨씬 빠름 대신에 이거는 + 대신 append로 더하면 됨
		StringBuffer sb = new StringBuffer("a");
		start = System.currentTimeMillis();
		for(int i = 0; i < 20000; i++) {
			sb.append("a");
		}
		
		end = System.currentTimeMillis();
		System.out.println("StringBuffer 객체 : " + (end - start) + "ms");
	}

}​
package g_api;

import java.util.ArrayList;
import java.util.List;

public class WrapperClass {
	
	/*
	 * Wrapper 클래스 : 기본형 타입을 객체로 사용해야 할 때 대신 사용하는 클래스
	 * - boolean	: Boolean
	 * - char		: Character
	 * - byte		: Byte
	 * - short		: Short
	 * - int		: Integer
	 * - long		: Long
	 * - float		: Float
	 * - double		: Double	
	 * 
	 * */
	public static void main(String[] args) {
		int a = 0; // int는 자료형 그 자체이기 때문에 ~~안에 같은 크기를 가지지 않음 그래서 a.이 안됨
		
		Integer iw = new Integer(a); // 박싱
		int b = iw; // 언박싱 (박스 안에서 숫자를 꺼내다)
		
		System.out.println(Integer.TYPE + " / " + Integer.SIZE + "bit");
		
		List<Integer>list = new ArrayList<Integer>(); //<>에는 객체만 올 수 있다
		List<Object>list3 = new ArrayList<Object>(); // 모든 클래스는 Object클래스를 상속
		//List<int>list4 = new ArrayList<int>(); //자료형만 담을 수 없기에 보완을 함 그래서 Integer로 써야함
		// 컬렉션프레임워크에는 객체만 담을 수 있다.
		int[] list2 = new int[0];
	}
}
package g_api;

import java.util.Arrays;

public class StringClass {

	/*
	 * String
	 * - 여러개의 '문자'를 사용하기 쉽게 만들어놓은 클래스
	 * 
	 * - String의 주요 메서드
	 * - boolean equals() : 문자열의 내용이 같은지 반환한다. (Override)
	 * - int length() : 문자열의 길이를 반환한다.
	 * - char charAt(int index) : 특정 인덱스에 위치한 문자를 반환한다.
	 * - String subString(int beginIndex [, int endIndex = 끝 인덱스]) //값을 지정하지 않으면 끝인덱스 반환
	 *  : 문자열의 특정 부분을 잘라서 반환한다. 
	 * - int indexOf(String str) : 문자열내의 특정 문자의 인덱스를 반환한다.
	 * - contains() : 문자열이 특정 문자열을 포함하고 있는지 반환한다.
	 * - split() : 문자열을 특정 문자를 기준으로 나누어 배열형태로 반환한다.
	 * - trim() : 문자열 앞 뒤 공백을 제거해 반환한다.
	 * - valueOf() : 다른 타입의 데이터를 문자열로 변환해 반환한다.
	 * */
	public static void main(String[] args) {
		String s1 = new String("문자열");
		String s2 = new String("문자열");
		
	
		String s3 = "문자열";
		String s4 = "문자열";
		
		// equals()
		System.out.println(s1.equals(s2)); // 이렇게하면 주소값 안의 내용을 비교하는거 true
		System.out.println(s1 == s2); // 이렇게하면 주소값끼리 비교하는거여서 false 
		
		//변수처럼 사용된 String은 주소값을 공유함 그래서 s3,s4는 true라고 나옴
		System.out.println(s3.equals(s4));
		System.out.println(s3 == s4);
		
		//length()
		System.out.println(s1.length());  //한칸씩해서 길이3
		
		//charAt()
		for(int i = 0; i<s1.length(); i++) {
			char charAt = s1.charAt(i);
			System.out.println(charAt);
		}
		// s1을 뒤집어 출력해주세요 (열자문)
		String rev = "";
		for(int i = s1.length() -1; i >= 0; i--) {
			rev += s1.charAt(i);
		}
		System.out.println(rev);
		
		//substring()
		// 123456789
		s1 = "abcdefghij";
		String sub1 = s1.substring(3); //3번 인덱스부터 끝까지
		System.out.println(sub1);
		String sub2 = s1.substring(5,8); //5번 인덱스부터 8번 인덱스 '전'까지 
		System.out.println(sub2);
		
		//indexof()
		int indexOf = s1.indexOf("e");
		System.out.println(indexOf);
		indexOf = s1.indexOf("z");
		System.out.println(indexOf); //찾으려는 문자열이 없으면 -1 반환
		s1 = "유재석,박명수,정준하,하하";
		System.out.println(s1.substring(s1.indexOf("정준하")));
		
		// 예제) substring 과 indexOf를 조합해서 가격만 int[]에 저장해주세요.
		String[] menu = {
				"수박 20000원",
				"오렌지 10000원",
				"귤 500원",
				"블루베리 3000원" 
		};
		
		// 수박 가격
//		String wm = menu[0]; // "수박 20000원"
//		int spaceIndex = wm.indexOf(" "); //2
//		int wonIndex = wm.indexOf("원"); // 8
//		String priceStr = wm.substring(spaceIndex + 1, wonIndex); // "200000"
//		int price = Integer.parseInt(priceStr);
//		System.out.println(price);
		
		int[] prices = new int[menu.length];
		for(int i = 0; i< prices.length; i++) {
			prices[i] = Integer.parseInt(
					menu[i].substring(menu[i].indexOf(" ") + 1,
									  menu[i].indexOf("원")));
		}
		System.out.println(Arrays.toString(prices));	
		
		s1 = "abcdefghij";
		
		// contains()
		// 방법 1
		boolean contains = s1.contains("c");
		System.out.println(contains);
		// 방법 2 indexOf가 더 좋음 이걸 쓰는 연습을 하장~~ ㄷ ㄷ
		contains = s1.indexOf("c") > -1;
		System.out.println(contains);
		
		//split()
		String[] split = s1.split("e"); //쪼갠 기준 문자는 사라진다
		System.out.println(Arrays.toString(split)); // abcd  fhij 로 나뉘었음
		
		split = s1.split("@");
		System.out.println(Arrays.toString(split)); // s1에 @가 없기 때문에 그냥 통째로
		split = s1.split("a");
		System.out.println(Arrays.toString(split)); // a는 사라지고 그냥 쪼개진다 split = {"", "bcdefhjij"}
		
		for(int i = 0; i < menu.length; i++) {
			split = menu[i].split(" ");
			System.out.printf("메뉴명 : %s / 가격 : %s\n", split[0], split[1]);
		}
		
		// trim()
		s1 = " 문 자 열 ";
		String trim = s1.trim();
		System.out.println("[" + s1 + "] => [" + trim + "]"); // 중간 띄어쓰기는 상관 없음 앞뒤에 공백만 제거 ~~
		// 사용자의 실수로 아이디나 비밀번호 뒤에 공백이 들어가는 것을 방지할 수 있음
		// (javascript 에서 .trim()은 모든 공백을 제거함)
		
		// valueOf()
		int number = 10;
		s1 = number + "";
		s1 = String.valueOf(number);
		// Integer.parseInt(s1)과 똑같음
		System.out.println(s1);
	}
}
package g_api;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularExpression {
	
	/*
	 * 정규표현식(정규식) : 문자열의 패턴을 검사하는 표현식
	 * 
	 * ^    뒷 문자로 시작
	 * $    앞 문자로 종료
	 * .    임의의 문자(줄바꿈제외)
	 * *	앞 문자가 0개 이상
	 * +	앞 문자가 1개 이상
	 * ?	앞 문자가 없거나 1개
	 * []	문자의 집합이나 범위([a-z] :a부터 z까지, [^a-z] : a부터 z가 아닌 것)
	 * {}	앞 문자의 개수({2} : 2개, {2,4} : 2개 이상 4개 이하)
	 * ()	그룹화 (1개의 문자처럼 인식)
	 * |	OR 연선
	 * \s	공백, 탭, 줄바꿈
	 * \S	공백, 탭, 줄바꿈이 아닌 문자
	 * \w	알파벳이나 숫자
	 * \W	알파벳이나 숫자 가 아닌 문자
	 * \d	숫자
	 * \D	숫자가 아닌 문자
	 * (?i)	뒷 문자의 대소문자 구분 안함
	 * \	정규표현식에서 사용되는 특수문자 표현
	 * */
	public static void main(String[] args) {
		   String str="abc123";
		   String regex="[a-z]{3}[0-9]{1,3}";
		   regex ="[a-z0-9]+";
		   regex = "\\w*";
		   regex = ".*";
		   
		   Pattern p = Pattern.compile(regex);
		   Matcher m = p.matcher(str);
		   System.out.println(m.matches());
		   
		   // 아이디, 전화번호,이메일주소의 유효성을 검사하는 정규표현식
		   // 아이디 : [a-z0-9]{5,20} : 5개 이상 20개 이하의 소문자거나 숫자
		   // 전화번호 :^0\\d{1,3}\\d{3,4}-\\d{4}
		   //		   : 0으로 시작하고 숫자가 1개 이상 3개 이하 + "-" 
		   //					+ 숫자가 3개 이상 4개 이하 + "-" + 숫자 5개
		   // 이메일 주소 : [a-z0-9]{5,20}@[a-zA-Z]+\\.(?i)(com|net|org|([a-z]{2}\\.kr))$
	}
}
package g_api;

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

public class DateClass {

	public static void main(String[] args) {
		String str = "2022-10-05"; //이거는 35일 뒤에 무슨 요일인지라는 구체적인 계산이 어려움
		Date today = new Date();
		System.out.println(today);
		
		// date 객체를 보기편한 문자열로 변환
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); //MM(월) mm(분) yyyy(년도)
		System.out.println(sdf1.format(today));
		
		SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss.SSS"); //HH(시) mm(분) ss.SSS(초.초)
		System.out.println(sdf2.format(today));
		
		SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		System.out.println(sdf3.format(today));
		
		SimpleDateFormat sdf4 = new SimpleDateFormat("yy-MM-dd(E)w hh:mm:ss a"); //(E) 요일 w(올해의 몇번째 주) W(이번달 중 이번주가 몇번째 주인지) a(am?pm) hh(12시간표기법) 
		System.out.println(sdf4.format(today));									//d는 한자리 숫자만 나옴 dd는 두자리 숫자가 나옴
		// Oracle :2022/10/05
		// Mysql : 2022-10-05
		
		// 문자열 -> 날짜 객체 변환
		String str1 = "2000년 08월 01일";
		SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy년 MM월 dd일");
		try {
			Date dateStr = sdf5.parse(str1);
			System.out.println(dateStr);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
												//(유지보수가 편하고 알아보기 편함)
		Calendar cal = Calendar.getInstance(); // 싱글톤 패턴 : 프로그램이 동작하면서 캘린더라는 객체는 딱 한번만 할수 있음 그래서
		//cal = new Calendar();					// 객체를 생성할려니 빨간줄이 뜨는거임(하나의 객체만 사용)
		
		cal.setTime(today);
		System.out.println(cal.getTime());
		cal.set(2020, 10, 1); //2020년 11월 1일 (자바는 0부터 시작되기 때문에)
		System.out.println(cal.getTime());
		
		// 날짜 계산
		cal.add(Calendar.YEAR, 1); // 년 2020년부터 1년을 증가시킨거임 그래서 결과값으로 2021이 나옴
		System.out.println(cal.getTime());
		System.out.println(sdf3.format(cal.getTime()));
		cal.add(Calendar.MONTH, 2); // 월
		cal.add(Calendar.DAY_OF_MONTH, -20); // 일
		cal.add(Calendar.HOUR, 4); // 시
		cal.add(Calendar.MINUTE, 40); // 분
		cal.add(Calendar.SECOND, 400); // 초
	}
}

'JAVA > 개념정리' 카테고리의 다른 글

JDBC (DB와 연결)  (0) 2022.10.10
컬렉션 프레임워크  (0) 2022.10.10
예외처리  (0) 2022.10.10
추상 클래스와 인터페이스  (0) 2022.10.09
Chapter 07 상속  (0) 2022.10.04
Comments