어제 풀었던 문제중 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";
[ ] 안에있는것중 하나라도 포함되기때문에
다음과 같은 문장을 찾는데도 문제가 없다!!!!
'부트캠프(Java)' 카테고리의 다른 글
자바/스프링 부트캠프 15일차( Collection {set , map} ) (0) | 2025.02.20 |
---|---|
자바/스프링 부트캠프 14일차( collection ) (3) | 2025.02.19 |
자바/스프링 부트캠프 12일차(API (4) | 2025.02.17 |
자바 / 스프링 부트캠프 11일차( 예외처리 , API) (1) | 2025.02.14 |
자바 / 스프링 부트캠프 10일차 ( 람다식 , 내부클래스, 예외처리) (0) | 2025.02.13 |