반응형
정규 표현식과 Pattern 클래스
문자열이 정해져 있는 형식으로 구성되어 있는지 검증해야 하는 경우에 정규표현식을 사용하면 된다.
기호 | 설명 | ||
[ ] | 한 개의 문자 | [abc] | a, b, c 중 하나의 문자 |
[^abc] | a, b, c 이외의 하나의 문자 | ||
[a-zA-Z] | a~z, A~Z 중 하나의 문자 | ||
\d | 한 개의 숫자, [0-9]와 동일 | ||
\s | 공백 | ||
\w | 한 개의 알파벳 또는 한 개의 숫자, [a-zA-Z_0-9]와 동일 | ||
? | 없음 또는 한 개 | ||
* | 없음 또는 한 개 이상 | ||
+ | 한 개 이상 | ||
{n} | 정확히 n개 | ||
{n,} | 최소한 n개 | ||
{n,m} | n개에서부터 m개까지 | ||
( ) | 그룹핑 |
- (02|010)-\d{3,4}-\d{4}
기호 | 설명 |
(02|010) | 02 또는 010 |
- | - 포함 |
\d{3,4} | 3자리 또는 4자리 숫자 |
- | - 포함 |
\d{4} | 4자리 숫자 |
- \w+@\w+\.\w+(\.\w+)?
기호 | 설명 |
\w+ | 한 개 이상의 알파벳 또는 숫자 |
@ | @ |
\w+ | 한 개 이상의 알파벳 또는 숫자 |
\. | . |
\w+ | 한 개 이상의 알파벳 또는 숫자 |
(\. \w+)? | \. \w+이 없거나 한 번 더 올 수 있음 |
- Pattern 클래스 : 문자열을 정규 표현식으로 검증하는 기능은 java.uril.regex.Pattern 클래스의 정적 메서드인 matches() 메서드가 제공한다.
Arrays 클래스
리턴타입 | 메서드 이름 | 설명 |
int | binarySearch(배열, 찾는 값) | 전체 배열 항목에서 찾는 값이 있는 인덱스 리턴 |
타겟 배열 | copyOf(원본배열, 복사할길이) | 원본 배열의 0번 본 배열의 0번 인덱스에서 복사할 길이만큼 복사한 배열 리턴, 복사할 길이는 원본 배열의 길이보다 커도 되며, 타겟 배열의 길이가 된다. |
타겟 배열 | CopyOfRange(원본 배열, 시작인덱스, 끝인덱스) | 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열 리턴 |
boolean | deepEquals(배열, 배열) | 두 배열의 깊은 비교(중첩 배열의 항목까지 비교) |
boolean | equals(배열, 배열) | 두 배열의 얕은 비교(중첩 배열의 항목은 비교하지 않음) |
void | fill(배열, 값) | 전체 배열 항목에 동일한 값을 저장 |
void | fill(배열, 시작인덱스, 끝인덱스, 값) | 시작 인덱스부터 끝 인덱스까지의 항목에만 동일한 값을 저장 |
void | sort(배열) | 배여ㅑㄹ의 전체 항목을 올므차순으로 정렬 |
String | toString(배열) | "[값1ㅡ, 값2, ...]"와 같은 문자열을 리턴 |
Wrapper(포장) 클래스
- 기본 타입의 값을 갖는 객체를 생성할 수 있다.
기본 타입 | 포장 클래스 |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
- 박싱과 언박싱 : 기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고, 포장 객체에서 기본 타입의 값을 얻는 과정을 언박싱이라고 한다.
Math 클래스
메서드 | 설명 |
int abs(int a) double abs(double a) |
절대값 |
double ceil(double a) | 올림값 |
double floor(double a) | 버림값 |
int max(int a, int b) double max(double a, double b) |
최대값 |
int min(int a, int b) double min(double a, double b) |
최소값 |
double random() | 랜덤값 |
double rint(double a) | 가까운 정수의 실수값 |
long round(double a) | 반올림값 |
Foramt 클래스
- 숫자 형식 클래스
- 0 : 10진수(빈자리는 0으로 채움)
- . : 소수점
- : 음수 기호
- , : 단위 구분
- E : 지수 문자
- ; : 양수와 음수의 패턴을 모두 기술할 경우, 패턴 구분자
- % : 100을 곱한 후에 % 문자를 붙임
- \u00A4 : 통화 기호
: 10진수(빈자리는 채우지 않음)
- 날짜 형식 클래스
- y : 년
- M : 월
- d : 일
- D : 월 구분 없는 일(1~365)
- E : 요일
- a : 오전/오후
- w : 년의 몇 번째 주
- W : 월의 몇 번째 주
- 문자열 형식 클래스
- + : 연결 연산자
java.time 패키지
- java.time : 날짜와 시간을 나타내는 핵심 API인 LocalDate, LocalTime, LocalDateTeim, ZonedDateTime을 포함하고 있다. ISO-8601에 정의된 달려 시스템에 기초한다.
- java.time.chrono : ISO-8601에 정의된 달려 시스템 이외에 다른 달력 시스템이 필요할 때 사용할 수 있는 API들이 포함되어 있다.
- java.time.format : 날짜와 시간을 파싱하고 포맷팅하는 API들이 포함되어 있다.
- java.time.temporal : 날짜와 시간을 연산하기 위한 보조 API들이 포함되어 있다.
- java.time.zone : 타임존을 지원하는 API들이 포함되어 있다.
날짜와 시간 객체 생성
- LocalDate : 로컬 날짜 클래스
LocalDate currDate = LocalDate.now(); LocalDate targetDate = LocalDate.of(int year, int month, int dayOfMonth);
- LocalTime : 로컬 시간 클래스
LocalTime currTime = LocalTime.now(); LocalTime targetTime = LocalTime.of(int year, int minute, int second, int nanoOfSecond);
- LocalDateTime : 로컬 날짜 및 시간 클래스(LocalDate + LocalTime)
LocalDateTime currDateTime = LocalDateTime.now(); LocalDateTime targetTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);
- ZonedDateTime : 특정 타임존(TimeZone)의 날짜와 시간 클래스
ZonedDateTime utcDateTime = ZonedDateTIme.now(ZoneId.of("UTC")); ZoneDateTime londonDateTime = ZonedDateTime.now(Zoneid.of("Europe/London")); ZOneDateTIme seoulDateTIme = ZOneDateTIme.now(ZoneId.of("Asia/Seoul"));
- Instant : 특정 시점의 Time-Stamp 클래스, 특정한 두 시점 간의 시간적 우선순위를 따질 때 사용한다.
Instant instant1 = Instant.now(); Instant instant2 = Instant.now(); if(instant1.isBefore(instant2)) { System.out.println("instant1이 빠릅니다."); } else if(instant1.isAfter(instant2)) { System.out.println("instant1이 늦습니다."); } else { System.out.println("동일한 시간입니다."); } System.out.println("차이(nanos): " + instant1.until(instant2, ChronoUnit.NANOS));
날짜와 시간에 대한 정보 얻기
- LocalDate
- getYear() : 년
- getMonth() : Month 열거 값
- getMonthValue() : 월
- getDayOfYear() : 일년의 몇 번째 일
- getDayOfMonth() : 월의 몇 번째 일
- getDayOfWeek() : 요일
- isLeapYear() : 윤년 여부
- LocalTime
- getHour() : 시간
- getMinute() : 분
- getSecond() : 초
- getNano() : 나노초
- ZonedDateTime
- getZone() : 존아이디를 리턴(ex: Asia/Seoul)
- getOffset() : 시차를 리턴
날짜와 시간을 조작
- 빼기와 더하기(LocalDate, LocalDateTime, ZonedDateTime)
- minus[Years, Months, Days, Weeks, Hours, Minutes, Seconds, Nanos)
- plus[Years, Months, Days, Weeks, Hours, Minutes, Seconds, Nanos)
- 변경하기(LocalDate, LocalDateTime, ZonedDateTime)
- with[Year, Month, DayOfMonth, DayOfYear, Hour, Minute, second, Nano], with(TemporalAdjuster adjuster)
- TemporalAdjuster
- firstDayOfYear() : 이번 해의 첫 번째 일
- lastDayOfYear() ; 이번 해의 마지막 일
- firstDayOfNextYear() : 다음 해의 첫 번째 일
- firstDayOfMonth() : 이번달의 첫 번째 일
- lastDayOfMonth() : 이번달의 마지막 일
- firstDayOfNextMonth() : 다음 달의 첫 번째 일
- firstInMonth(DayOfWeek dayOfWeek) : 이번 달의 첫 번째 요일
- lastInMonth(DayOfWeek dayOfWeek) : 이번 달의 마지막 요일
- next(DayOfWeek dayOfWeek) : 돌아오는 요일
- nextOrSame(DayOfWeek dayOfWeek) : 돌아오는 요일(오늘 포함)
- previous(DayOfWeek dayOfWeek) : 지난 요일
- previousOrSame(DayOfWeek dayOfWeek) : 지난 요일(오늘 포함)
날짜와 시간을 비교
클래스 | 메서드 | 설명 |
LocalDate LocalDateTime |
isAfter(ChronoLocalDate other) | 이후 날짜인지 비교 |
isBefore(ChronoLocalDate other) | 이전 날짜인지 비교 | |
isEqual(ChronoLocalDate other) | 동일 날짜인지 비교 | |
LocalTime LocalDateTime |
isAfter(LocalTime other) | 이후 시간인지 비교 |
isBefore(LocalTime other) | 이전 시간인지 비교 | |
LocalDate | until(ChronoLocalDate endDateExclusive) | 날짜 차이 |
LocalDate LocalTime LocalDateTime |
until( Temporal endExclusive, TemporalUnit unit ) |
시간 차이 |
Period | between( LocalDate startDateInclusive, LocalDate endExclusive ) |
날짜 차이 |
Duration | between( Temporal startinclusive, Temporal endExclusive ) |
시간 차이 |
ChronoUnit.YEARS | between( Temporal temporal1Inclusive, Temporal temporal2Exclusive ) |
전체 년 차이 |
ChronoUnit.MONTHS | 전체 달 차이 | |
ChronoUnit.WEEKS | 전체 주 차이 | |
ChronoUnit.DAYS | 전체 일 차이 | |
ChronoUnit.HOURS | 전체 시간 차이 | |
ChronoUnit.SECONDS | 전체 초 차이 | |
ChronoUnit.MILLIS | 전체 밀리초 차이 | |
ChronoUnit.NANOS | 전체 나노초 차이 |
파싱과 포맷팅
- 파싱(LocalDate, LocalTime, LocalDateTime, ZoneddDteTime)
- parse(CharSequence)
- parse(CharSequence, DateTimeFormatter)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); LocalDate localDate = LocalDate.parse("2020.12.12", formatter); LocalDate localDate = LocalDate.parse("2020.12.12", BASIC_ISO_DATE);
상수 | 설명 | 예 | 부가설명 |
ofLocalizedDate(dateStyle) | Formatter with date style from the locale | '2011-12-03' | |
ofLocalizedTime(timeStyle) | Formatter with time style from the locale | '10:15:30' | |
ofLocalizedDateTime(dateTimeStyle) | Formatter with a style for date and time from the locale | '3 Jun 2008 11:05:30' | |
ofLocalizedDateTime(dateStyle,timeStyle) | Formatter with date and time styles from the locale | '3 Jun 2008 11:05' | |
BASIC_ISO_DATE | Basic ISO date | '20111203' | 날짜 시간 값을 yyyymmdd 문자열 값으로 변환합니다. |
ISO_LOCAL_DATE | ISO Local Date | '2011-12-03' | 날짜 시간 값을 yyyy-mm-dd 문자열 값으로 변환합니다. |
ISO_OFFSET_DATE | ISO Date with offset | '2011-12-03+01:00' | 날짜 시간 값을 yyyy-mm-dd+오프셋 값 문자열 값으로 변환합니다. 오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다. |
ISO_DATE | ISO Date with or without offset | '2011-12-03+01:00'; '2011-12-03' | 날짜 시간 값을 yyyy-mm-dd+오프셋 값 또는 yyyy-mm-dd 문자열 값으로 변환합니다. 오프셋 값이 사용 가능한 경우 추가됩니다. |
ISO_LOCAL_TIME | Time without offset | '10:15:30' | 날짜 시간 값을 hh-mm-ss 문자열 값으로 변환합니다. |
ISO_OFFSET_TIME | Time with offset | '10:15:30+01:00' | 날짜 시간 값을 hh-mm-ss+오프셋 값 문자열 값으로 변환합니다.오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다. |
ISO_TIME | Time with or without offset | '10:15:30+01:00'; '10:15:30' | 날짜 시간 값을 hh:mm, hh:mm:ss 또는 hh:mm:ss+오프셋 값 문자열 값으로 변환합니다. 오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다. |
ISO_LOCAL_DATE_TIME | ISO Local Date and Time | '2011-12-03T10:15:30' | 날짜 시간 값을 yyyy-mm-ddThh:mm:ss 문자열 값으로 변환합니다. |
ISO_OFFSET_DATE_TIME | Date Time with Offset | 2011-12-03T10:15:30+01:00' | 날짜 시간 값을 yyyy-mm-ddThh:mm:ss+오프셋 값 문자열 값으로 변환합니다. 오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다. |
ISO_ZONED_DATE_TIME | Zoned Date Time | '2011-12-03T10:15:30+01:00[Europe/Paris]' | 날짜 시간 값을 yyyy-mm-ddThh:mm:ss+오프셋 값[zone id] 문자열 값으로 변환합니다. 오프셋 값은 현지 시간과 UTC의 차이를 시간 및 분으로 나타냅니다. 형식 내 'zone id'는 시간대를 나타냅니다 |
ISO_DATE_TIME | Date and time with ZoneId | '2011-12-03T10:15:30+01:00[Europe/Paris]' | 날짜 시간 값을 yyyy-mm-ddThh:mm:ss, yyyy-mm-ddThh:mm:ss+오프셋 값 또는 yyyy-mm-ddThh:mm:ss+오프셋 값[zone id] 문자열 값으로 변환합니다. |
ISO_ORDINAL_DATE | Year and day of year | '2012-337' | 날짜 시간 값을 yyyy-[연 기준 날짜] 문자열 값으로 변환합니다. 예를 들어 날짜 시간 값이 '2018년 1월 25일'인 경우 '2018-25' 형식으로 지정됩니다. 여기서 '25'는 날짜를 나타냅니다. |
ISO_WEEK_DATE | Year and Week | 2012-W48-6' | 날짜 시간 값을 yyyy-[연 기준 주]-[요일] 문자열 값으로 변환합니다. 예를 들어 날짜 시간 값이 '2018년 1월 25일'인 경우 '2018-W4-4' 형식으로 지정됩니다. 여기서 'W4'는 해당 연도의 네 번째 주를 나타내고, '4'는 요일을 나타냅니다. |
ISO_INSTANT | Date and Time of an Instant | '2011-12-03T10:15:30Z' | 날짜 시간 값을 yyyy-mm-ddThh:mm:ss+오프셋 값Z 문자열 값으로 변환합니다. |
RFC_1123_DATE_TIME | RFC 1123 / RFC 822 | 'Tue, 3 Jun 2008 11:05:30 GMT' | 날짜 시간 값을 [요일], [월 기준 날짜] ['MMM' 형식의 월] ['YYYY'형식의 연도] hh:mm:ss [offset id] 문자열 값으로 변환합니다. 예를 들어 날짜 시간 값이 '2018-01-25 10:15'인 경우 'Thu, 25 December 2018 10:15:00GMT' 형식으로 지정됩니다. 'GMT'는 사용 가능한 오프셋이 없음을 나타냅니다. |
- 포맷팅(LocalDate, LocalTime, LocalDateTime, ZonedDateTime)
- foramt(Date TimeFormatter formatter)
LocalDateTime now = LocalDateTime.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 M월 d일 a h시 m분"); String nwoString = now.format(dateTimeFormatter);
- foramt(Date TimeFormatter formatter)
반응형
'개발(합니다) > Java&Spring' 카테고리의 다른 글
[java-기초-13] 제네릭 (0) | 2021.02.13 |
---|---|
[java-기초-12] 멀티 스레드 (5) | 2021.01.25 |
[java-기초-11-01] 기본 API 클래스 (4) | 2021.01.12 |
[java-기초-06-부록] 애너테이션 (4) | 2021.01.11 |
[java-기초-10] 예외 처리 (0) | 2021.01.08 |