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. 유튜브 재생 키 값 가져오기
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;
}
}
}
달력 부분 추가 필요
'수업' 카테고리의 다른 글
+27 컬렉션 프레임워크: ArrayList (0) | 2022.06.10 |
---|---|
+26 형식화 클래스: Decimal Format, SimpleDateFormat, ChoiceFormat (0) | 2022.06.09 |
+25 라이브러리 (0) | 2022.06.08 |
+24 라이브러리 (0) | 2022.06.07 |
+24 예외처리(throw, throws, finally) (0) | 2022.06.07 |