String[] result = "문자열".split("정규표현식");
홍길동&이수홍,박연수,김자바-최명호
String[] names = text.split("&|,|-");
StringTokenizer st = new StringTokenizer("문자열", "구분자");
String text = "홍길동/이수홍/박연수";
StringTokenizer st = new StringTokenizer(text, "/");
| 메소드 | 설명 | |
|---|---|---|
| int | countTokens() | 꺼내지 않고 남아 있는 토큰의 수 |
| boolean | hasMoreTokens() | 남아 있는 토큰이 있는지 여부 |
| String | nextToken() | 토큰을 하나씩 꺼내옴 |
String data = "ABC";
data += "DEF";

→ “ABC”에 “DEF”가 추가되었기 때문에 한 개의 String 객체가 사용되었다고 생각할 수 있지만, String 객체는 내부 데이터를 수정할 수 없으므로 “ABCDEF”라는 새로운 String 객체가 생성되고 data 변수는 해당 객체를 참조하게 된다.
이 두 클래스는 내부 버퍼(데이터를 임시로 저장하는 메모리)에 문자열을 저장해 두고, 그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어 있다.
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(16);
StringBuilder sb = new StringBuilder("Java");
| 메소드 | 설명 |
|---|---|
| append(…) | 문자열 끝에 주어진 매개값을 추가 |
| insert(int offset, …) | 문자열 중간에 주어진 매개값을 추가 |
| delete(int start, int end) | 문자열의 일부분을 삭제 |
| deleteCharAt(int index) | 문자열에서 주어진 index의 문자를 삭제 |
| replace(int start, int end, String str) | 문자열의 일부분을 다른 문자열로 대치 |
| reverse() | 문자열의 순서를 뒤바꿈 |
| setCharAt(int index, char ch) | 문자열에서 주어진 index의 문자를 다른 문자로 대치 |
| 기호 | 설명 |
|---|---|
| [] | [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-123-1234 또는 010-1234-5678 과 같은 전화번호를 위한 정규 표현식
(02|010)-\d{3,4}-\d{4}
white@naver.com과 같은 이메일을 위한 정규 표현식
\w+@\w+\.\w+(\.\w+)?
boolean result = Pattern.matches("정규식", "검증할 문자열");
| 리턴 타입 | 메소드 이름 | 설명 |
|---|---|---|
| int | binarySerarch(배열, 찾는값) | 전체 배열 항목에서 찾는 값이 있는 인덱스 리턴 |
| 타겟 배열 | copyOf(원본배열, 복사할길이) | 원본 배열의 0번 인덱스에서 복사할 길이만큼 복사한 배열 리턴, 복사할 길이는 원본 배열의 길이보다 커도 되며, 타겟 배열의 길이가 된다. |
| 타겟 배열 | copyOfRange(원본배열, 시작인덱스, 끝인덱스) | 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열 리턴 |
| boolean | deepEquals(배열, 배열) | 두 배열의 깊은 비교(중첩 배열의 항목까지 비교) |
| boolean | equals(배열, 배열) | 두 배열의 얕은 비교(중첩 배열의 항목은 비교하지 않음) |
| void | fill(배열, 값) | 전체 배열 항목에 동일한 값을 저장 |
| vlid | fill(배열, 시작인덱스, 끝인덱스, 값) | 시작 인덱스부터 끝 인덱스까지의 항목에만 동일한 값을 저장 |
| void | sort(배열) | 배열의 전체 항목을 오름차순으로 정렬 |
| String | toString(배열) | “[값1, 값2, …]”와 같은 문자열 리턴 |
char[] arr1 = {'J', 'A', 'V', 'A'};
char[] arr2 = Arrays.copyOf(arr1, arr1.length);
→ arr1[] 배열의 전체 항목을 복사해서 arr2[] 배열을 생성
char[] arr1 = {'J', 'A', 'V', 'A'};
char[] arr2 = Arrays.copyOf(arr1, 1, 3);
→ arr1[] 배열 항목 중 1번, 2번 인덱스 항목을 arr2[] 배열의 0번, 1번 인덱스 항목으로 복사한다.
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
//Object src: 원본배열 / int srcPos : 원본시작 인덱스 / Object dest : 타겟배열
//int destPos: 타겟시작인덱스 / int length : 복사 개수
//총 5개의 매개값이 필요
→ 단순히 배열을 복사할 목적이라면 System.arraycopy() 메소드를 이용할 수 있다.
public class SearchExample{
public static void main(String[] args){
//기본 타입값 검색
int[] score= {99, 97, 98};
Arrays.sort(scores);
int index = Arrays.binarySearch(scores, 99);
System.out.println("찾은 인덱스: " + index);
//문자열 검색
String[] name = {"홍길동", "박동수", "김민수"};
Arrays.sort(names);
index = Arrays.binarySearch(names, "홍길동");
System.out.println("찾은 인덱스: " + index);
//객체 검색
Member m1 = new Member("홍길동");
Member m2 = new Member("박동수");
Member m3 = new Member("김민수");
Member[] members = {m1, m2, m3};
Arrays.sort(members);
index = Arrays.binarySearch(members, m1);
System.out.println("찾은 인덱스 :" + inde);
}
}
| 기본 타입 값을 줄 경우 | 문자열을 줄 경우 |
|---|---|
| Byte obj = new Byte(10); | Byte obj = new Byte(”10”); |
| Character obj = new Character(’가’;) | 없음 |
| Short obj = new Short(100); | Short obj = new Short(”100”); |
| Integer obj = new Integer(1000); | Integer obj = new Integer(”1000”); |
| Long obj = new Long(10000); | Long obj = new Long(”10000”); |
| Float obj = new Float(2.5F); | Float obj = new Float(”2.5F”); |
| Double obj = new Double(3.5); | Double obj = new Double(”3.5”); |
| Boolean obj = new Boolean(true); | Boolean obj = new Boolean(”true”); |
→ 박싱하는 방법은 다음과 같이 포장 클래스의 생성자 매개값으로 기본 타입의 값 또는 문자열을 넘겨주면 된다.
Integer obj = Integer.valueOf(1000);
Integer obj = Integer.valueOf("1000");
→ 생성자를 이용하지 않아도 각 포장 클래스마다 가지고 있는 정적 valueOf() 메소드를 사용할 수도 있다.
| 기본 타입의 값을 이용 |
|---|
| byte num = obj.byteValue(); |
| char ch = obj.charValue(); |
| short num = obj.shortValue(); |
| int num = obj.intValue(); |
| long num = obj.longValue(); |
| float num = obj.floatValue(); |
| double num = obj.doubleValue(); |
| boolean num = obj.booleanValue(); |
→ 언방식(다시 기본 타입의 값을 얻어 내는 것)을 위해서는 각 포장 클래스마다 가지고 있는 “기본타입명 + Value()” 메소드를 호출하면 된다.
Integer obj = 100; //자동 박싱
→ int 타입의 값을 Integer 클래스 변수에 대입하면 자동 박싱이 일어나 힙 영역에 Integer 객체가 생성된다.
Integer obj = new Integer(200);
int value1 = obj; //자동 언박싱
int value2 = obj + 100; //자동 언박싱
→ Integer 객체를 int 타입 변수에 대입하거나, Integer 객체와 int 타입값을 연산하면 Integer 객체로부터 int 타입의 값이 자동 언박싱되어 연산된다.
📌 자동 박싱과 언박싱은 자바 5부터 추가된 기능이기 때문에 자바 4 이전 버전에서는 직접 박싱과 언박싱을 해주어야한다.
| 기본 타입의 값을 사용 |
|---|
| byte num = Byte.parseByte(”10”); |
| short num = Short.parseShort(”100”); |
| int num = Integer.parseInt(”1000”); |
| long num = Long.parseLong(”10000”); |
| float num = Float.parseFloat(”2.5F”); |
| double num = Double.parseDobule(”3.5”); |
| boolean bool = Boolean.parseBoolean(”true”); |
| 타입 | 값의 범위 |
|---|---|
| boolean | true, false |
| char | \u0000 ~ \u007f |
| byte, short, int | -128 ~ 127 |
| 메소드 | 설명 | 예제 코드 | 리턴값 |
|---|
| int abs(int a)
double abs(double a) | 절대값 | int v1 = Math.abs(-5);
double v2 = Math.abs(-3.14); | v1 = 5
v2 = 3.14 |
| double ceil(double a) | 올림값 | double v3 = Math.ceil(5.3);
double v4 = Math.ceil(-5.3); | v3 = 6.0
v4 = -5.0 |
| double floor(double a) | 버림값 | double v5 = Math.floor(5.3);
double v6 = Math.floor(-5.3); | v5 =5.0
v6 = -6.0 |
| int max(int a, int b)
double max(double a, double b) | 최대값 | int v7 = Math.max(5, 9);
double v8 = Math.max(5.3, 2.5); | v7 = 9
v8 = 5.3 |
| int min(int a, int b)
double min(double a, double b) | 최소값 | int v9 = Math.min(5, 9);
double v10 = Math.min(5.3, 2.5); | v9 = 5
v10 = 2.5 |
| double random() | 랜덤값 | double v11 = Math.random(); | 0.0 ≤ v11 ≤ 1.0 |
| double rint(double a) | 가까운 정수의 실수값 | double v12 = Math.rint(5.3);
double v13 = Math.rint(5.7); | v12 = 5.0
v13 = 6.0 |
| long round(double a) | 반올림값 | long v14 = Math.round(5.3);
long v15 = Math.round(5.7); | v14 = 5
v15 = 6 |
| 생성자 | 설명 |
|---|---|
| Random() | 호출 시마다 다른 종자값(현재시간 이용)이 자동 설정된다. |
| Random(long seed) | 매개값으로 주어진 종자값이 설정된다. |
| 리턴값 | 메소드(매개 변수) | 설명 |
|---|---|---|
| boolean | nextBoolean() | boolean 타입의 난수를 리턴 |
| double | nextDouble() | double 타입의 난수를 리턴(0.0 ≤ ~ < 1.0) |
| int | nextInt() | int 타입의 난수를 리턴 |
| int | nextInt(int n) | int 타입의 난수를 리턴(0 ≤ ~ ≤ n) |
Date now = new Date();
Calendar now = Calendar.getInstance();
→ Calendar 클래스의 정적 메소드인 getInstance() 메소드를 이용하면 현재 운영체제에 설정되어 있는 시간대를 기준으로 한 Calendar 하위 객체를 얻을 수 있다.
int year = now.get(Calendar.YEAR); //년도를 리턴
int month = now.get(Calendar.MONTH) + 1; //월을 리턴
int day = now.get(Calendar.DAY_OF_MONTH); //일을 리턴
int week = now.get(Calendar.DAY_OF_WEEK); //요일을 리턴
int amPm = now.get(Calendar.AM_PM); //오전/오후를 리턴
int hour = now.get(Calendar.HOUR); //시를 리턴
int minute = now.get(Calendar.MINUTE); //분을 리턴
int second = now.get(Calendar.SECOND); //초를 리턴
→ Calendar 객체를 얻었다면 get() 메소드를 이용해서 날짜와 시간에 대한 정보를 읽을 수 있다.
| 기호 | 의미 | 패턴 예 | 1234567.89 → 변환 결과 |
|---|---|---|---|
| 0 | 10진수(빈자리는 0으로 채움) | 0 |
0.0
00000000000 | 12345678
1234567.9
0001234567.890000 |
| # | 10진수(빈자리는 채우지 않음) | #
#.#
#############.#### | 12345678
1234567.9
1234567.89 |
| . | 소수점 | #.0 | 1234567.9 |
| - | 음수 기호 | +#.0 | +1234567.9
-1234567.9 |
| , | 단위 구분 | #,###.0 | 1,234,567.9 |
| E | 지수 문자 | 0.0E0 | 1.2E6 |
| ; | 양수와 음수의 패턴을 모두 기술할 경우, 패턴 구분 문자 | +#,###;-#,### | +1234,568(양수일 때)
-1234,568(음수일 때) |
| % | 100을 곱한 후에 % 문자 붙임 | #.# % | 123456789% |
| \u00A4 | 통화 기호 | \u00A4 #,### | ₩1,234,568 |
DecimalFormat df = new DecimalFormat("#,###.0");
String result = df.format(1234567.89);
→ 적용할 패턴을 선택했다면 DecimalFormat 생성자 매개값으로 지정해서 객체를 생성하면된다. 그리고 나서 format() 메소드를 호출해서 패턴이 적용된 문자열을 얻으면 된다.
| 패턴 문자 | 의미 | 패턴 문자 | 의미 |
|---|---|---|---|
| y | 년 | H | 시(0~23) |
| M | 월 | h | 시(1~12) |
| d | 일 | K | 시(0~11) |
| D | 월 구분이 없는 일(1~365) | k | 시(1~24) |
| E | 요일 | m | 분 |
| a | 오전/오후 | s | 초 |
| w | 년의 몇 번째 주 | S | 밀리세컨드(1/1000초) |
| W | 월의 몇 번째 주 |
SimpleDateFormat sdf = new SimpleDateformat("yyyy년 MM월 dd일");
String strDate = sdf.format(new Date());
String message = "회원ID: {0} \n회원 이름: {1} \n회원 전화: {2}";
String result = MessageFormat.format(message, id, name, tel);
//값을 나열하는 대신 배열을 이용해서 인덱스 순서에 맞게 대입할 수도 있다.
| 패키지 | 설명 |
|---|---|
| java.time | 날짜와 시간을 나타내는 핵심 API인 LocaDate, LocalDateTime, ZonedDateTime을 포함하고 있다. 이 클래스들은 ISO-8601에 정의된 달력 시스템에 기초한다. |
| java.time.chrono | ISO-8601에 정의된 달력 시스템 이외에 다른 달력 시스템이 필요할 때 사용할 수 있는 API들이 포함되어 있다. |
| java.time.format | 날짜와 시간을 파싱하고 포맷팅하는 API들이 포함되어 있다. |
| java.time.temporal | 날짜와 시간을 연산하기 위한 보조 API들이 포함되어 있다. |
| java.time.zone | 타임존을 지원하는 API들이 포함되어 있다. |
| 클래스명 | 설명 |
|---|---|
| LocalDate | 로컬 날짜 클래스 |
| LocalTime | 로컬 시간 클래스 |
| LocalDateTime | 로컬 날짜 및 시간 클래스(LocalDate + LocalTime) |
| ZonedDateTime | 특정 타임존(TimeZone)의 날짜와 시간 클래스 |
| Instant | 특정 시점의 Time-Stamp 클래스 |
LocalDate currDate = LocalDate.now();
LocalDate targetDAte = LocalDate.of(int year, int month, int dayOfMonth);
LocalTime currTime = LocalTime.now();
LocalTime targetTime = LocalTime.of(int hour, int minute, int second,
int nanoOfSecond);
| 클래스 | 리턴타입 | 메소드(매개 변수) | 설명 |
|---|---|---|---|
| LocalDate | int | getYear() | 년 |
| Month | getMonth() | Month 열거값 | |
| int | getMonthValue() | 월 | |
| int | getDayOfYear | 일년의 몇 번째 일 | |
| LocalDate | int | getDayOfMonth() | 월의 몇 번째 일 |
| DayOfWeek | getDayOfWeek() | 요일 | |
| boolean | isLeapYear() | 윤년 여부 | |
| LocalTime | int | getHour() | 시간 |
| int | getMinute() | 분 | |
| int | getSecond() | 초 | |
| int | getNano() | 나노초 리턴 |
| 메소드(매개변수) | 설명 |
|---|---|
| minusYear(long) | 년 빼기 |
| minusMonth(long) | 달 빼기 |
| minusDays(long) | 일 빼기 |
| minusWeek(long) | 주 빼기 |
| plusYear(long) | 년 더하기 |
| plusMonths(long) | 달 더하기 |
| plusWeeks(long) | 주 더하기 |
| plusDays(long) | 일 더하기 |
| minusHours(long) | 시간 빼기 |
| minusMinute(long) | 분 빼기 |
| minusSeconds(long) | 초 빼기 |
| minusNanos(long) | 나노초 빼기 |
| plusHours(long) | 시간 더하기 |
| plusMinutes(long) | 분 더하기 |
| plusSecond(long) | 초 더하기 |
| plusNanos(long) | 나노초 더하기 |
| 메소드(매개 변수) | 설명 |
|---|---|
| withYear(int) | 년 변경 |
| withMonth(int) | 월 변경 |
| withDayOfMonth(int) | 월의 일 변경 |
| withDayOfYear(int) | 년의 일 변경 |
| with(TemporalAdjuster adjuster) | 상대 변경 |
| withHour(int) | 시간 변경 |
| withMinute(int) | 분 변경 |
| withSecond(int) | 초 변경 |
| withNano | 나노초 변경 |