수업

+26 라이브러리 : java.util, java.util.regex, java.util.StringTokenizer

hs_developer 2022. 6. 9. 15:44

java.lang

> Object, String, StringBuffer, Math, Wrapper

 

java.util

> Scanner, StringTokenizer

 

java.util

Random

 

1. 1-99 중에 랜덤 숫자 출력

import java.util.*;
public class MainClass {

	public static void main(String[] args) {
		
		Random r = new Random();
		
		int  a = r.nextInt(100); // 1-99
		
		System.out.println(a);
	}
}

 

 

2. 예약 가능 날짜 랜덤 출력

9 // 오늘 일
ㅡㅡㅡㅡ 극장 선택 ㅡㅡㅡㅡ
1. CGV
2. 메가박스
3. 롯데시네마
9. 프로그램 종료
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
극장 선택: 
1
ㅡㅡㅡ CGV 예약일 ㅡㅡㅡ
10
11
14
18
20
24
31
ㅡㅡㅡㅡ 극장 선택 ㅡㅡㅡㅡ
1. CGV
2. 메가박스
3. 롯데시네마
9. 프로그램 종료
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
극장 선택:
import java.text.SimpleDateFormat;
import java.util.*;
public class MainClass {

	// 난수 출력
	public static String getRand()
	{
		String result = "";
		Random r = new Random();
		
		int len = r.nextInt(10)+5; // 0-9 > 5-14 (예약 날짜를 5개에서 14개 출력)
		int[] reserve = new int[len]; // 5-14
		
		// 중복체크
		int su = 0;
		boolean bCheck = false;
		
		for(int i=0; i<len; i++)
		{
			bCheck=true;
			
			while(bCheck)
			{
				su = r.nextInt(31)+1;
				bCheck = false;
				for(int j=0; j<i; j++)
				{
					if(reserve[j]==su)
					{
						bCheck=true;
						break;
					}
				}
			}
			reserve[i]=su;
		}
		
		Arrays.sort(reserve);
		for(int i=0; i<len; i++)
		{
			result += reserve[i] + ","; // 마지막에 있는 "," 제거
		}
		
		result = result.substring(0, result.lastIndexOf(","));
		
		return result;
	}
	
	public static void main(String[] args) {
		
		String[] theater = 
			{
					"CGV",
					"메가박스",
					"롯데시네마"
			};
		
		Scanner sc = new Scanner(System.in);
		
		// 오늘 날짜 구하기
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("d");
		String today = sdf.format(date);
		
		int t = Integer.parseInt(today);
		System.out.println(today);
		
		// 극장 목록
		while(true)
		{
			System.out.println("ㅡㅡㅡㅡ 극장 선택 ㅡㅡㅡㅡ");
			
			for(int i=0; i<theater.length; i++)
			{
				System.out.println((i+1) + ". " + theater[i]);
			}
			System.out.println("9. 프로그램 종료");
			System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
			
			
			// 극장 목록 번호 입력
			System.out.println("극장 선택: ");
			int no = sc.nextInt();
			
			// 결과
			if(no == 9)
			{
				System.out.println("프로그램 종료!!");
				break;
			}
			
			else if(no == 1)
			{
				System.out.println("ㅡㅡㅡ CGV 예약일 ㅡㅡㅡ");
				
				String res = getRand();
				String[] days = res.split(",");
				
				for(int i=0; i<days.length; i++)
				{
					if(Integer.parseInt(days[i]) >= t) // 오늘 이후 날짜로 출력
						System.out.println(days[i]);
				}
			}
			else if(no == 2)
			{
				System.out.println("ㅡㅡㅡ 메가박스 예약일 ㅡㅡㅡ");
				
				String res = getRand();
				String[] days = res.split(",");
				
				for(int i=0; i<days.length; i++)
				{
					if(Integer.parseInt(days[i]) >= t)
						System.out.println(days[i]);
				}
			}
			else if(no == 3)
			{
				System.out.println("ㅡㅡㅡ 롯데시네마 예약일 ㅡㅡㅡ");
				
				String res = getRand();
				String[] days = res.split(",");
				
				for(int i=0; i<days.length; i++)
				{
					if(Integer.parseInt(days[i]) >= t)
						System.out.println(days[i]);
				}
			}
			
			
		
		}
	}
}

 

 

** 마지막 문자열 제거

// 전
10,13,20,25,30,

// 후
10,13,20,25,30
public static void main(String[] args) {
		
    String[] arr = {"10", "13", "20", "25", "30"};

    // 방법1
    String res = "";

    for(int i=0; i<arr.length; i++)
    {
        res += arr[i] + ",";
    }

    res = res.substring(0, res.lastIndexOf(",")); // 맨 마지막 "," 제거
    System.out.println(res);


    // 방법2 > 라이브러리
    String res = String.join(",", arr);
    System.out.println(res);
}

 

 

 

 

java.util.regex (p505)

-Pattern

-Matcher

 

단어 패턴 > 맛있는, 맛있게, 맛있고..

정규식 이용 > 맛있+

-추천, 레시피, 빅데이터, 선거에 사용

 

c[a-z] -> c로 시작 -> 2글자(소문자)

c[a-z]* -> c로 시작 -> 2글자 이상(0 이상)

c[a-z]+ -> c로 시작 -> 3글자 이상(1 이상)

c[A-Za-z] -> c로 시작 -> 2글자 (c 뒤에 오는 글자 -> 대문자, 소문자)

 

.* -> 모든 문자열

c. -> c로 시작하는 2글자 문자 ("." -> 모든 문자(숫자, 한글, 영문, 특수문자, 공백..)

c.* -> c로 시작하는 문자열

c\\. -> c.와 일치하는 문자열

 

 

예제

 

1.

010-1111-1111
010
1111
1111
02-222-2222
02
222
2222
import java.util.regex.*;

public class MainClass5 {

	public static void main(String[] args) {
		
		String data = "HP:010-1111-1111, HOME:02-222-2222";
//		String pattern = "(0[0-9]{1,2})-([0-9]{3,4})-([0-9]{4})"; // 방법1
		String pattern = "(0\\d{1,2})-(\\d{3,4})-(\\d{4})"; // 방법2
		
		Pattern p = Pattern.compile(pattern);
		Matcher m = p.matcher(data);
		
		while(m.find())
		{
			System.out.println(m.group());
			System.out.println(m.group(1));
			System.out.println(m.group(2));
			System.out.println(m.group(3));
		}
	}
}

 

0[0-9]{1,2} > 0으로 시작 뒤에 숫자가 1개 or 2개 있음
[0-9]{3,4} > 숫자 (3,4) 있음
[0-9]{4} > 숫자 4개 있음

 

 

 

2. 유튜브 재생 키 값 가져오기

 

 

youtube.txt
0.76MB

 

import java.io.*;
import java.util.regex.*;
public class MainClass6 {

	public static void main(String[] args) {
		
		try
		{
			FileReader fr = new FileReader("c:\\javaDev\\youtube.txt");
			StringBuffer sb = new StringBuffer(); // 파일 빨리 읽기
			
			int i=0;
			
			while((i = fr.read()) != -1)
			{
				sb.append(String.valueOf((char)i));
			}
			
			fr.close();
			System.out.println(sb.toString());
			
			// 키 낚아채기
			// /watch?v=8dJyRm2jJ-U
			String data = sb.toString();
			Pattern p = Pattern.compile("/watch\\?v=[^가-힣]+"); // 한글 외에 다른 여러개 있음
			Matcher m = p.matcher(data);
			
			while(m.find())
			{
				String key = m.group(); // 찾은 데이터 읽어 옴
				
				key = key.substring(key.indexOf("=")+1, // "="의 뒤의 값 자름 
						key.indexOf("\""));
				System.out.println(key);
			}
			
		} catch(Exception ex) {}
	}
}

 

 

StringTokenizer

 

단어별 분리 > split

 

1. 생성자

new StringTokenizer(데이터, 구분 문자)

2. countTokens()

3. hasMoreTokens()

4. nextToken()

 

 

 

예제 

 

1.

 

color의 총 개수: 7
red
green
blue
black
yellow
pink
magenta
import java.util.StringTokenizer;

public class MainClass7 {

	public static void main(String[] args) {
		
		String data = "red,green,blue,black,yellow,pink,magenta";
		
		StringTokenizer st = new StringTokenizer(data, ",");
		
		System.out.println("color의 총 개수: " + st.countTokens());
		
		while(st.hasMoreTokens())
		{
			System.out.println(st.nextToken());
		}
		
	}
}

 

 

 

2.

 

투뿔목살 (200g) 16,000원
특오겹살 (200g) 16,000원
껍살 (250g) 18,000원
정가브리(200g) 18,000원
import java.util.*;
public class MainClass8 {

	public static void main(String[] args) {
		
		String data = 		
				
			"투뿔목살 (200g) 16,000원"
			+"특오겹살 (200g) 16,000원"
			+"껍살 (250g) 18,000원"
			+"정가브리(200g) 18,000원";
		
		StringTokenizer st = new StringTokenizer(data, "원");
		
		while(st.hasMoreTokens())
		{
			System.out.println(st.nextToken()+"원");
		}
		
		
	}
}

 

 

 

3. 서버

 

요청 데이터: 
100|김|1234
로그인 요청 처리
ID: 김
PW: 1234
요청 데이터: 
110|LEE
로그아웃 요청 처리
ID: LEE
요청 데이터: 
200|방|12|좋음
만들기 요청 처리
방 이름: 방
인원 수: 12
상태: 좋음
import java.util.*;
public class MainClass9 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("요청 데이터: ");
		String cmd = sc.next();
		
		// 서버 처리
		final int LOGIN = 100;
		final int LOGOUT = 110;
		final int MAKEROOM = 200;
		
		StringTokenizer st = new StringTokenizer(cmd, "|");
		int protocol = Integer.parseInt(st.nextToken());
		
		switch(protocol)
		{
		case LOGIN:
			System.out.println("로그인 요청 처리");
			System.out.println("ID: " + st.nextToken());
			System.out.println("PW: " + st.nextToken());
			break;
			
		case LOGOUT:
			System.out.println("로그아웃 요청 처리");
			System.out.println("ID: " + st.nextToken());
			break;
			
		case MAKEROOM:
			System.out.println("만들기 요청 처리");
			System.out.println("방 이름: " + st.nextToken());
			System.out.println("인원 수: " + st.nextToken());
			System.out.println("상태: " + st.nextToken());
			break;
		}
		
	}
}

 

 

달력 부분 추가 필요