문자열을 여러 개의 토큰으로 분리하는 클래스이다.
// 1. 띄어쓰기 기준으로 문자열을 분리
StringTokenizer st = new StringTokenizer(문자열);
// 2. 구분자를 기준으로 문자열을 분리
StringTokenizer st = new StringTokenizer(문자열, 구분자);
/*
* 3. 구분자를 기준으로 문자열을 분리할 때 구분자도 토큰으로 넣는다. (true)
* 구분자를 분리된 문자열 토큰에 포함시키지 않는다. (false)
* (디폴트 : false)
*/
StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);
String str = "여러:구분자를 사용하려면//어떻게:할까";
StringTokenizer st = new StringTokenizer(str, ":/");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
// 결과
// 여러
// 구분자를 사용하려면
// 어떻게
// 할까
StringTokenizer는 java.util에 포함되어 있는 클래스이고,
split은 String 클래스에 속해있는 메소드이다.
StringTokenizer는 문자 또는 문자열로 문자열을 구분하지만, split은 정규표현식으로 구분한다.
StringTokenizer는 빈 문자열을 토큰으로 인식하지 않지만, split은 빈 문자열을 토큰으로 인식한다.
StringTokenizer는 결과값이 문자열이고, split은 결과값이 문자열 배열이다.
| 분류 | 데이터 타입 | 초기값 |
|---|---|---|
| 기본 타입 (정수) | byte[] | 0 |
| char[] | '\u0000' | |
| short[] | 0 | |
| int[] | 0 | |
| long[] | 0L | |
| 기본 타입 (실수) | float[] | 0.0F |
| double[] | 0.0 | |
| 기본 타입 (논리) | boolean[] | false |
| 참조 타입 | 클래스[] | null |
| 인터페이스[] | null |
클래스인 String 역시 초기값 null
기본 타입 배열(byte, short, int, char, long, float, double, boolean)은 각 항목에 직접 값을 가지고 있다.
참조 타입(클래스, 인터페이스) 배열은 각 항목에 객체의 번지를 가지고 있다.
String[] 배열은 각 항목에 문자열이 아니라, String 객체의 주소 즉 String 객체를 참조하게 된다.
String[] 배열의 항목 하나하나 String 변수와 동일하게 취급되어야 한다. String[] 배열 항목 간에 문자열을 비교하기 위해서는 == 연산자 대신 equals() 메소드 사용해야 한다.
배열은 한 번 생성하면 크기를 변경할 수 없기 때문에 더 많은 저장 공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사해야 한다.
for문 사용 OR System.arraycopy() 메소드 사용
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
// src : 원본 배열
// srcPos : 원본 배열에서 복사할 항목의 시작 인덱스
// dest : 새 배열
// destPos : 새 배열에서 붙여넣을 시작 인덱스
// length는 복사할 개수
System.arraycopy(arr1, 0, arr2, 0, arr1.length)
해당 복사는 객체의 번지를 복사한다. 새 배열의 항목은 이전 배열의 항목이 참조하는 객체와 동일하다. 얕은 복사(shallow copy). 깊은 복사도 존재
요일(월 ~ 일), 계절(봄 ~ 겨울) 등 한정된 값만을 갖는 데이터 타입을 열거 타입(enumeration type)이라고 한다. 열거 타입은 몇개의 열거 상수(enumeration constant) 중에서 하나의 상수를 저장하는 데이터 타입이다.
public enum 열거타입이름{ ... }
public enum Week {
MONDAY,
TUESDAY,
WEDENSDAY,
THURSDAY, ...}
// 열거 타입 변수
Week reservationDay; // 열거타입 변수;
Week today = Week.SUNDAY; // 열거타입 변수 = 열거타입.열거상수;
// Week reservationDay; // 열거타입 변수;
Week today = Week.SUNDAY; // 열거타입 변수 = 열거타입.열거상수;
today == Week.SUNDAY // true
StringTokenizer와 split()은 StringBuffer, StringBuilder처럼 코딩 테스트에서 자주 활용되므로 사용법을 꼭 익혀야 한다.
또한 열거 타입(enum)도 유용한 기능이지만, 실제 개발 시 활용을 자주 잊게 되는 것 같다.
이번에 다시 정리하면서 기본적인 기능이라도 꾸준히 연습하고 익숙해지는 것이 얼마나 중요한지 새삼 느꼈다.