부트캠프(Java)

자바/스프링 부트캠프 13일차( API {java.util})

동곤일상 2025. 2. 18. 17:49
반응형

어제 풀었던 문제중 3번문제다

package test2;

public class Test3_b {
	public static void main(String[] args) {
		String str = "가나다";
		System.out.println(format(str, 7, 0));
		System.out.println(format(str, 7, 1));
		System.out.println(format(str, 7, 2));
		System.out.println(format(str, 2, 0));
	}
	static String format(String str, int len, int align) {
		if (str.length() >= len)
			{
            return str.substring(0, len);
            }
            //0번부터 len-1까지의 요소만뽑는다
		
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < len; i++) {
			sb.append(" ");
		}공백을 len만큼 채움
		int l = len - str.length();  //공백갯수
		switch (align) {
		 case 0:sb.replace(0, str.length(), str);break; //0번인경우 그냥 붙인다
		 case 1:sb.replace(l/2,str.length()+l/2, str);break;//1번인경우 공백의 반부터 시작
		 case 2:sb.replace(l,str.length()+l, str);break;//2번인경우 공백의 끝부터시작
		}
		return sb.toString();//반환값이 String이므로 toString 후 반환
	}
}

////////////////////////////////////////

Tue Feb 18 10:14:43 KST 2025
2025년02월18일 10시14분43초 화 오전
Thu Dec 25 10:00:30 KST 2025
2025-12-25 목요일

 

2025.02.17 - [AWS활용 자바 부트캠프] - 자바/스프링 부트캠프 12일차(API

 

자바/스프링 부트캠프 12일차(API

1)API 1) java.lang   1-1) String   1-2) StringBuffer ,  StringBuilder   1-3) Math   1-4) Wrapper   1.5) 정리 2) java.utils         2025.02.14 - [AWS활용 자바 부트캠프] - 자바 / 스프링 부트캠프 11일차( 예외처리

ddkk1120.tistory.com

어제내용과 이어짐


1) java.util

  1-1) Arrays 클래스

  1-2 Date 클래스

   1-3) Calendar 클래스

   1-4) java.uitls.regex 패키지 (생소함)

   1-5) Scanner 클래스

 

 

 

 

 


1-1) Array 클래스

 

 

 배열 항목 비교

Arrays.equals(배열, 배열) - 1차 항목의 값만 비교 

Arrays.deepEquals(배열, 배열) - 중첩된 배열의 항목까지 비교

 

 배열 항목 정렬

Arrays.sort(배열)- 항목 오름차 순으로 정렬 

기본 타입이거나 String 배열 자동 정렬

사용자 정의 클래스 배열은 Comparable 인터페이스를 구현해야만 정렬 

 

배열 항목 검색

특정 값 위치한 인덱스 얻는 것 

Arrays.sort(배열)로 먼저 정렬

Arrays.binarySearch(배열, 찾는 값) 메소드로 항목을 찾아야

 

package ex8_arrays;

import java.util.Arrays;
import java.util.Comparator;

public class ArrayEx1 {

	public static void main(String[] args) {
		String[] arr1 = {"홍길동","이몽룡","유재석","박명수"};
		for (String s : arr1) {
			System.out.print(s+" ");
		}System.out.println();
		
		System.out.println(Arrays.toString(arr1));
		
		int [] arr2 = {1,2,3,4,5};
		System.out.println(Arrays.toString(arr2));
		
		//arr1 배열의 값을 김삿갓으로 저장하기
		Arrays.fill(arr1,"김삿갓");//해당 배열의값을 오른쪽과같이 바꿈
		System.out.println(Arrays.toString(arr1));
		
		//arr2의요소를 모두 10으로 저장하기
		Arrays.fill(arr2, 10);
		System.out.println(Arrays.toString(arr2));
		
		//arr1배열의 1,2번인덱스값을 홍길동전으로저장하기
		Arrays.fill(arr1, 1,3,"홍길동전");
		//Arrays.fill(해당배열,시작인덱스,끝인덱스,"요소")
	// 			==> 시작인덱스부터 (끝인덱스-1)까지 요소로 채움
		System.out.println(Arrays.toString(arr1));
		
		//arr2배열의 요소를 2,3번인덱스를 100으로채우자
		Arrays.fill(arr2,2,4,100);
		System.out.println(Arrays.toString(arr2));
		
		//arr1 배열을 정렬하기
		System.out.println("@@정렬@@");
		Arrays.sort(arr1);
		System.out.println(Arrays.toString(arr1));
		
		System.out.println("@@내림 차순 정렬@@");
		Arrays.sort(arr1,Comparator.reverseOrder());
		System.out.println(Arrays.toString(arr1));
	}
}



////////////////////////
홍길동 이몽룡 유재석 박명수 
[홍길동, 이몽룡, 유재석, 박명수]
[1, 2, 3, 4, 5]
[김삿갓, 김삿갓, 김삿갓, 김삿갓]
[10, 10, 10, 10, 10]
[김삿갓, 홍길동전, 홍길동전, 김삿갓]
[10, 10, 100, 100, 10]
@@정렬@@
[김삿갓, 김삿갓, 홍길동전, 홍길동전]
내림 차순 정렬
[홍길동전, 홍길동전, 김삿갓, 김삿갓]

 


1-2) Date 클래스


 * Date 클래스
 * SimpleDateFormat : 형식화클래스 java.text 패키지의 클래스
 *  String format(Date) : Date 객체를 지정한 형식대로 문자열로 변경해 리턴
 *  Date parse(String) : 형식화된 문자열로 이루어진 날짜형태의 문자열을 Date객체로 변경
 *    ParseException 예외처리 해야함
 * 날짜 format에 사용되는 문자
 * yyyy 년도
 * MM 월
 * dd 일
 * HH 시간
 * mm 분
 * ss 초
 * E 요일
 * a 오전.오후
 

package ex9_date;

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


public class DateEx1 {
	public static void main(String[] args) {
		Date date = new Date();
		System.out.println(date);
		
		SimpleDateFormat sf = new SimpleDateFormat("yyyy년MM월dd일 HH시mm분ss초 E a");
		System.out.println(sf.format(date));
		
		SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		String formatDate = "2025-12-25 10:00:30";
		Date day = null;
		try {
			day = sf2.parse(formatDate);
			
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(day);
		
		
		SimpleDateFormat sf3 = new SimpleDateFormat("yyyy-MM-dd E요일");
		System.out.println(sf3.format(day));
		//day날짜를 2025-12-25 목요일 형식으로출력
		
	}

}

////////////////////
Tue Feb 18 10:20:01 KST 2025
2025년02월18일 10시20분01초 화 오전
Thu Dec 25 10:00:30 KST 2025
2025-12-25 목요일

 


package ex9_date;

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

public class DateEx2 {
	public static void main(String[] args) {
		Date now = new Date();//현재일자시간
		
		//1970년 이후부터 현재까지의 시간을 밀리초 리턴
		System.out.println(now.getTime());//현재시간의 밀리초
		System.out.println(System.currentTimeMillis());//똑같음
		
		//2025-03-01의 요일과 밀리초 출력하기
		SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
		String sday = "2025-03-01";
		Date day = null;
		try {
			day = sf.parse(sday);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(sday+" "+new SimpleDateFormat("E요일").format(day));
		System.out.println("밀리초 : "+day.getTime());
		
		//내일의 날짜와 요일 출력
		int num = 1;
		now.setTime(now.getTime()+ num*(1000L*60*60*24));
		System.out.println(new SimpleDateFormat("yyyy-MM-dd E요일").format(now));
	}
}

1739842336706

1739842336706

2025-03-01 토요일

밀리초 : 1740754800000

2025-02-19 수요일

 

 


Exam

package ex9_date;

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

//년도와 월 입력받아 월의 마지막일자와 마지막일의 요일 출력

public class Exam1 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.print("년도, 월 입력 : ");
		int year = scan.nextInt();
		int month = scan.nextInt();
		
		String day = year+"-"+(month+1)+"-01";//담달 1일
		
	
		SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd E요일");
		
		Date date = null;
		
		try {
			date = sf.parse(day);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println(date);
		date.setTime(date.getTime() - (1000*60*60*24));
		System.out.println(sf2.format(date));
	}
}

년도, 월 입력 : 2024 12

Wed Jan 01 00:00:00 KST 2025

2024-12-31 화요일

 


1-3) Calendar 클래스


 * Calendar 클래스
 * 추상 클래스 : 객체화불가
 *  getInstance() 메서드로 객체 리턴

package ex10_calendar;

import java.util.Calendar;

public class CalandarEx1 {
	public static void main(String[] args) {
		Calendar today = Calendar.getInstance();
		System.out.println(today);
		System.out.println("년도 :"+today.get(Calendar.YEAR));
		System.out.println("월(0~11) :"+(today.get(Calendar.MONTH)+1));
		//Calendar 는 (0~11월만 표현)
		
		System.out.println("년도기준 몇째 주 : "+today.get(Calendar.WEEK_OF_YEAR));
		System.out.println("월 기준 몇째 주 : "+today.get(Calendar.WEEK_OF_MONTH));
		System.out.println("일자 : "+today.get(Calendar.DATE));
		System.out.println("1년 중 몇번째 날? :"+today.get(Calendar.DAY_OF_YEAR));
		System.out.println("월 기준일자 : "+today.get(Calendar.DAY_OF_MONTH));
		System.out.println("연 기준일자 : "+today.get(Calendar.DAY_OF_YEAR));
		System.out.println("요일(1:일~7:토) : "+today.get(Calendar.DAY_OF_WEEK));
		System.out.println("월 기준 몇 째 : "+today.get(Calendar.DAY_OF_WEEK_IN_MONTH));
		System.out.println("오전(0) / 오후(1) : "+today.get(Calendar.AM_PM));
		System.out.println("시간(0~11) : "+today.get(Calendar.HOUR));
		System.out.println("시간(0~23) : "+today.get(Calendar.HOUR_OF_DAY));
		System.out.println("분(0~59) : "+today.get(Calendar.MINUTE));
		System.out.println("초(0~59) : "+today.get(Calendar.SECOND));
		System.out.println("밀리초 (0~999) : "+today.get(Calendar.MILLISECOND));
		System.out.println("TimeZone(-12 ~ 12) : "
				
				+today.get(Calendar.ZONE_OFFSET)/(1000*60*60));//영국보다9시간빠름
		System.out.println("이번달의 마지막일자 : "+today.getActualMaximum(Calendar.DATE));
		
	}
}

java.util.GregorianCalendar[time=1739846968127,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2025,MONTH=1,WEEK_OF_YEAR=8,WEEK_OF_MONTH=4,DAY_OF_MONTH=18,DAY_OF_YEAR=49,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=49,SECOND=28,MILLISECOND=127,ZONE_OFFSET=32400000,DST_OFFSET=0]

년도 :2025

월(0~11) :2

년도기준 몇째 주 : 8

월 기준 몇째 주 : 4

일자 : 18

1년 중 몇번째 날? :49

월 기준일자 : 18

연 기준일자 : 49

요일(1:일~7:토) : 3

월 기준 몇 째 : 3

오전(0) / 오후(1) : 0

시간(0~11) : 11

시간(0~23) : 11

분(0~59) : 49

초(0~59) : 28

밀리초 (0~999) : 127

TimeZone(-12 ~ 12) : 9

이번달의 마지막일자 : 28


package ex10_calendar;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.Calendar;

public class CalendarEx2 {
	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		cal.set(2025,(2-1), 28);
		//날짜, 설정 

		System.out.printf("날짜 : %4d-%02d-%02d",cal.get(Calendar.YEAR),
				(cal.get(Calendar.MONTH)+1),cal.get(Calendar.DATE));
		System.out.println();

		LocalDate date = LocalDate.of(2025, 02, 28);
		System.out.println("날짜(Localdate) : "+date);

		//2025 12 25 일의 날짜와 요일 출력해보자
		String week = "일월화수목금토";
		cal.set(2025,(12-1),25);

		System.out.printf("날짜 : %4d-%02d-%02d %c요일\n",cal.get(Calendar.YEAR),
				(cal.get(Calendar.MONTH)+1),cal.get(Calendar.DATE),
				week.charAt(cal.get(Calendar.DAY_OF_WEEK)-1));
                //1~7 : 일 ~토 
	
	}
}

날짜 : 2025-02-28

날짜(Localdate) : 2025-02-28

날짜 : 2025-12-25 목요일

 

 


Date와 Calendar의 상호교환

package ex10_calendar;

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

public class CalendarEx3 {
	public static void main(String[] args) {
		
		//Calendar < ==== Date
		Date now = new Date();
		//다음날짜로 변경
		now.setTime(now.getTime()+(1000L*60*60*24));
		System.out.println(now);
		
		Calendar cal = Calendar.getInstance();//현재날짜
		cal.setTime(now);//Date 클래스를 이용해 Calendar 객체의 날짜설정
		
		
		System.out.printf("날짜 : %4d-%02d-%02d",cal.get(Calendar.YEAR),
				(cal.get(Calendar.MONTH)+1),cal.get(Calendar.DATE));
		System.out.println();
		
		//Date <== Calendar
		Date day = new Date();
		day.setTime(cal.getTimeInMillis());
		String format = new SimpleDateFormat("yyyy년MM월dd일").format(day);
		System.out.println(format);
		
		
	}

}

////////////////////////////////////

Wed Feb 19 11:47:33 KST 2025
날짜 : 2025-02-19
2025년02월19일

 

 


예제

 

난 LocalDate방식이 훨씬편함

package ex10_calendar;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Scanner;

/*
 * 년도와 월 입력받아 년월의 마지막일자와 요일 출력
 * Calendar 객체이용하기
 */
public class Exam1 {
	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		Scanner scan = new Scanner(System.in);
		System.out.print("년 월  입력 : ");
		int y = scan.nextInt();
		int m = scan.nextInt();
		
		c.set(y,(m-1),01);// day 를 0 으로하면 마지막일자임
		int lastday = c.getActualMaximum(Calendar.DATE);
		c.set(y,(m-1),lastday);//이건 c.set(y,m,0);과 같음
		
		String week = "일월화수목금토";
		
		System.out.printf("%4d년-%02d월-%02d일-%s요일",c.get(Calendar.YEAR),
				(c.get(Calendar.MONTH)+1),
				c.get(Calendar.DATE),
				week.charAt(c.get(Calendar.DAY_OF_WEEK)-1));
		System.out.println();
		
		
		//Localdate와 DayofWeek 사용
		LocalDate ld = LocalDate.of(2025, 2,1);
		DayOfWeek wk = ld.with(TemporalAdjusters.lastDayOfMonth()).getDayOfWeek();
		LocalDate with = ld.with(TemporalAdjusters.lastDayOfMonth());
		System.out.print(with+",");
		System.out.println(wk);
	}
}

년 월 입력 : 2025 02

2025년-02월-28일-금요일

2025-02-28,FRIDAY

 


1-4). java.util.regex 패키지

 

Matcher   

Pattern

 

package ex11.regular;

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

public class RegularEx1 {
	public static void main(String[] args) {
		String[] date = {"bat", "baby" , "bonus","c","cA","cD","ca","car","combat","couunt",
				"cTT","data","disk"};

		//문서양식같은 거
		/*
		 * c[A-Za-z]? : c문자로시작하고 뒤에 영문자(A~z)가 1개또는 0개
		 * 
		 *   c : 문자c
		 *   [A-Z a-Z]: 대소문자상관없이 문자 1개
		 *   ? : [A-Z a-Z]가 0 또는 1개 (?가 없다면 무조건 문자 1개)
		 *   + : 1개 이상
		 *   * : 0개 이상
		 */
		
		Pattern p = Pattern.compile("c[A-Za-z]+");//c로 시작하는 문자
//		Pattern p = Pattern.compile("c[A-Za-z]?"); [A-Za-z]가 0개 or 1개
	
		System.out.print("c로시작하는 문자 : ");
		for (String s : date) {
			
			Matcher m = p.matcher(s);//matcher 패턴형식에 맞는지 검증
			
			if(m.matches()) {//패턴검증 패턴에 맞는경우 : T
				System.out.print(s+",");
			}
		}
		System.out.println();
		
		String name = "홍길동 ,    김삿갓,이몽룡 , 유재석,   임꺽정";
		String[] split2 = name.split(",");
		System.out.println("공백제거 전 "+Arrays.toString(split2));
		
		String[] split = name.split("\\s*,\\s*");
		//  \s : 공백 한 문자    * : 0개이상   \s*:  공백0개이상을 제거해줌
		System.out.println("공백제거 후 "+Arrays.toString(split));
		
	}

}


////////////////

c로시작하는 문자 : cA,cD,ca,car,combat,couunt,cTT,
공백제거 전 [홍길동 ,     김삿갓, 이몽룡 ,  유재석,    임꺽정]
공백제거 후 [홍길동, 김삿갓, 이몽룡, 유재석, 임꺽정]

정규식

 

 *  .  : 문자 한개
 *  ? : 0 또는 1개
 *  * : 0개 이상
 *  + : 1개 이상
 *  ^[..] : 문자열의시작  [^0-9] : 숫자로 시작하는 경우
 *  [^..] : 지정된 문자 제외 [^0-9] : 숫자가 아닌 경우
 *    |   : or     02|010 : 02 혹은 010 이니?
 *    & : and
 *    () : 그룹
 *    \s : 공백한개
 *    \S : 공백아닌문자 1개
 *    \d : 숫자한개 [0-9]와 같은의미
 *    \D : 숫자가 아닌 경우
 *    \w : 일반문자 [0-9 A-Z a-z]
 *    \W : 특수문자
 *    {n} : n개    \d{2} == 숫자2개
 *    {n,} : n개 이상
 *    {n,m} : n개 이상 m개 이하

 

Matcher m.matches() : 검증이 true인 문자만

package ex11.regular;

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

public class RegularEx2 {
public static void main(String[] args) {
	String [] patterns = {",","[a-z]?","^[0-9]","[0-9]+",
						"[a-z]*","[a-z]+","02|010",
						"\\s","\\S","\\d","\\d{2}","\\D",
						"\\w","\\W"};
	String[] datas = {"","a","1","12","012","abc","02"," ","A","5","*"};
	for (String s : datas) {
		if(s.equals("")) {
			System.out.println("빈 문자열 \"\"패턴 ==>");
		}
		else if(s.equals(" ")) {
			System.out.println("공백문자 \" \" 패턴==>");
		}
		else {
			System.out.println(s+" 문자의 패턴==>");
		}
		for (String p : patterns) {
			Pattern pattern = Pattern.compile(p);
			Matcher m = pattern.matcher(s);
			if(m.matches()) {
				System.out.println(p+",");
			}
			
		}System.out.println();
	}
}
}


빈 문자열 ""패턴 ==>
[a-z]?,
[a-z]*,

a 문자의 패턴==>
[a-z]?,
[a-z]*,
[a-z]+,
\S,
\D,
\w,

1 문자의 패턴==>
^[0-9],
[0-9]+,
\S,
\d,
\w,

12 문자의 패턴==>
[0-9]+,
\d{2},

012 문자의 패턴==>
[0-9]+,

abc 문자의 패턴==>
[a-z]*,
[a-z]+,

02 문자의 패턴==>
[0-9]+,
02|010,
\d{2},

공백문자 " " 패턴==>
\s,
\D,
\W,

A 문자의 패턴==>
\S,
\D,
\w,

5 문자의 패턴==>
^[0-9],
[0-9]+,
\S,
\d,
\w,

* 문자의 패턴==>
\S,
\D,
\W,

Pattern p = Pattern.compile(telP)   : telP형식의 패턴 컴파일

Matcher m = p.matcher(source);  :문자열에 패턴검증

 

m.find() : 문자열에서 패턴에맞는 문자열존재시 T 

package ex11.regular;

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

public class RegularEx3 {
	public static void main(String[] args) {
		String source =" 핸드폰 : 010-1111-1111,집:02-123-5678"+
				"이메일:regular@aaa.bbb,계좌번호:301-01-123456";
		String telP ="(0\\d{1,2})-(\\d{3,4})-(\\d{4})";
		//0다음 1or2개숫자 - 3개or4개숫자 - 4개 숫자
		Pattern p = Pattern.compile(telP);
		Matcher m = p.matcher(source);
		int i = 0;
		System.out.println("전화번호 : ");
		//m.find() : source에서 패턴에맞는 문자열존재시 T 
		while(m.find()){
			System.out.println(++i+" : "+m.group()+" => "+
					m.group(1)+","+m.group(2)+","+m.group(3));
                    //패턴의 그룹이 3개이므로 각각 출력가능
		}

		System.out.println("이메일 : ");
		i=0;
		String emailP = "(\\w+)@(\\w+).(\\w{3})";
		p = Pattern.compile(emailP);
		m = p.matcher(source);
		while(m.find()){
			System.out.println(++i+" : "+m.group()+" => "+
					m.group(1)+","+m.group(2)+","+m.group(3));
		}
		System.out.println("계좌번호 : ");
		String bankP ="([0-9]{3})-([0-9]{2})-([0-9]{6})";
        		//[0-9] == \d
		i=0;
		p= Pattern.compile(bankP);
		m = p.matcher(source);
		while(m.find()){
			System.out.println(++i+" : "+m.group()+" => "+
					m.group(1)+","+m.group(2)+","+m.group(3));
		}

	}

}

전화번호 :

1 : 010-1111-1111 => 010,1111,1111

2 : 02-123-5678 => 02,123,5678

이메일 :

1 : regular@aaa.bbb => regular,aaa,bbb

계좌번호 :

1 : 301-01-123456 => 301,01,123456

 


Exam

 

package ex11.regular;

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

/*
 * data 문자열 중 점수를 찾아서 총점과 평균을 출력하자
 */
public class Exam1 {
	public static void main(String[] args) {
		String data = "번호:1 , 이름:홍길동 , 국어:100,영어:70,수학:85,과학:95";
		
		String p = "(\\d{2,3})";
		Pattern compile = Pattern.compile(p);
		Matcher m = compile.matcher(data);
		
		int sum=0;
		int count=0;
		while(m.find()) {
			sum += Integer.parseInt(m.group());
			count++;
		}
		System.out.println("sum : "+sum);
		System.out.println("avg : "+(double)sum/count);	
	}
}

String p ="\\d{2,3}"   2~3개의 숫자

Pattern,compile(p) 후

data에 matcher 시킴 (패턴에맞는걸 걸러냄)

 

m.find() : 패턴과 일치하는게 존재하는지??

찾았다면 m.group()을  int형으로 변환시켜준 후

sum에 누적 , count ++;

 

sum출력

sum을 count로 나눠서 avg출력

 


1-5) Scanner 클래스

 

scan.useDelimiter("\\s*and\\s*"); 으로 정규식이 사용가능해짐

package ex12_Scanner;

import java.util.NoSuchElementException;
import java.util.Scanner;

public class ScannerEx1 {
	public static void main(String[] args) {
		String str = "100 and 200 and animal and lion and tiger";
		Scanner scan = new Scanner(str);
		scan.useDelimiter("\\s*and\\s*");
		//split 과 같은느낌인거같음 .
		
		//str을 and 기준으로 문자열을 분리해서 읽을 준비
		
		while(true) {
			try {
				String token = scan.next();
				System.out.println(token);
				
			} catch (NoSuchElementException e) {
				//읽을 수 있는 데이터가없는경우 예외발생
				break;
			}
		}
	}
}

//////////////////////////////////////////

100
200
animal
lion
tiger

 


Exam

다음과같은 String에 숫자의합을 구해봐라

Scanner와 regex 이용

package ex12_Scanner;

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

public class Exam1 {
	public static void main(String[] args) {
		String str = "100 and 200 and animal and lion and tiger";
		Scanner scan = new Scanner(str);
		scan.useDelimiter("\\s*and\\s*");
		int sum=0;
		
		
		while(true) {
			try {
				String token = scan.next();//useDelimiter에 의해 출력
				String p = "(\\d+)";//숫자
				Pattern c = Pattern.compile(p);//숫자패턴 컴파일
				Matcher n = c.matcher(token);//패턴과 token을 검증
				
				if(n.matches()) {//숫자가(패턴과)맞다면 true
					sum+=Integer.parseInt(token);
				}
		
			} catch (NoSuchElementException e) {
				break;
			}
		}
		System.out.println("숫자의 합 : "+sum);
		
	}
}

숫자의 합 : 300

 

 


예제풀이

 

package test3;
/*
 * 
년도와 월를 입력하세요
2025 02

	   2025년2월
   일  월  화   수  목  금   토
                           1
   2   3   4   5   6   7   8
   9  10  11  12  13  14  15
  16  17  18  19  20  21  22
  23  24  25  26  27  28
 */

import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Test1_A {
	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		Date date = new Date();
		Scanner scan = new Scanner(System.in);
		System.out.print("연도와 월을 입력 : ");

		int y = scan.nextInt();
		int m = scan.nextInt();
		System.out.println(y+" 년 "+m+" 월");

		c.set(y, m-1,1);
		int lastday = c.getActualMaximum(Calendar.DATE);
		String week = "일월화수목금토";
		String[] split = week.split("");
		for (String s : split) {
			System.out.printf("%6s",s);
		}//요일 출력해놓는다 4칸간격으로!!
		System.out.println();

		
		
		while(true) {
			int day = c.get(Calendar.DATE);
			if(day==1) {
				System.out.print(" ");
				for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK)-1; i++) {
					System.out.printf("%6s","");
				}
				System.out.printf("%6d",day);
				if(c.get(Calendar.DAY_OF_WEEK)-1==6) {System.out.println();}
			}

			else if(c.get(Calendar.DAY_OF_WEEK)-1!=6) {
				System.out.printf("%6d",day);	
			}
			else {
				System.out.printf(" %6d",day);
				System.out.println();
			}
			day++;
			c.set(y,(m-1), day);
			if(day>lastday) {break;}
		}
	}
}

 

한번 루프가 돌면 day를 증가시킨 후

c.set(y,(m-1),day) 로 다시세팅한다.

 c.get(Calendar.DATE) 로 날짜를 계속 받고

 

c.get(Calendat.DAY_OF_WEEK))

 요일을 판단해서  토요일이면 \n 을 할 수 있게설정

 

또한 배열맞추는건 알아서!!!


Exam

 

 * 찾고자 하는 번호의 일부를 입력받아 번호를 출력하기
 * [결과]
 * 찾는 번호의 일부를 입력하세요:


 * 3456
 * 012-3456-7890
 * 013-3456-7890
 

package test3;

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



public class Test3 {
	public static void main(String[] args) {
		String[] phoneNumArr = {
				"012-3456-7890","099-2456-7980", 
				"088-2346-9870","013-3456-7890" };
		
		Scanner scan = new Scanner(System.in);
		System.out.println("찾고자하는 번호 ");
		String num = scan.next();
		String p = "0\\d{2}-\\d{4}-\\d{4}";
		Pattern compile = Pattern.compile(p);
		for (String s : phoneNumArr) {
			Matcher m = compile.matcher(s);
			m.find();			
			if(m.group().contains(num)) {
				System.out.println(m.group());
			}
		}
	}
}

패턴을 0xx - xxxx - xxxx 로 맞춰준후

패턴을 컴파일 후

Matcher를 통해  배열의 요소와 패턴의 검증

 

패턴과 일치하는 숫자에서 contains을 이용해

내가 입력한 num이 포함되어있는 group을 출력한다

(m.find())를 하지않고는 group을 출력하거나 찾을 수 없음

 

group : 패턴과 일치하는 문자열

 


Exam

package test3;

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

/*
 * text 문자열에서 이메일을 추출하여 출력하기
  [결과]
  추출된 이메일:
  example_1@gmail.com
  contact@company.co.kr
 */
public class Test4 {
	public static void main(String[] args) {
		String text = 
				"Hello, my email is example_1@gmail.com and my work email is contact@company.co.kr.";
		
	
		String pat = "[\\w_]+@[\\w.]+\\.[\\w]+";
        // [](문자 클래스) 안의 내용은 "여기에 있는 문자 중 하나라도 포함되면 OK"
        //            example_1   @ gmail  .com
		//            contact @ company.co .kr
		//                m1.find()는 부분적으로 맞으면 true를 반환해줌
		Pattern c1 = Pattern.compile(pat);
		Matcher m1 = c1.matcher(text);
		while(m1.find()) {
			System.out.print(m1.group());
			System.out.println();
		}

	}
}

example_1@gmail.com

contact@company.co.kr

 

" donggon_25g@naver.co.kr64";

 [  ] 안에있는것중 하나라도 포함되기때문에

다음과 같은 문장을 찾는데도 문제가 없다!!!!