반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 별 찍기
- LeetCode 83번
- LeetCode 83 c언어
- 브루트포스 알고리즘
- 문자열
- 정수론
- 연결리스트 정렬
- 큰 수 연산
- 구현
- 프로그래머스
- 다이나믹 프로그래밍
- 문자열제곱
- 조합론
- 유클리드 호제법
- 자료 구조
- 수학
- 스택
- Queue
- 시뮬레이션
- 실패함수
- 해시를 사용한 집합과 맵
- 임의 정밀도 / 큰 수 연산
- 큐
- 연결리스트 중복제거
- 재귀
- 이분 탐색
- LeetCode Remove Duplicates from Sorted List in c
- 사칙연산
- 정렬
- KMP알고리즘
Archives
- Today
- Total
hahn
[JAVA] StringTokenizer 본문
728x90
반응형
문제 상황
스택 구현하다가 시간제한 때문에
Scanner에서 BufferedReader로 교체하려 하는데
push 1
push 2
이런 식으로 입력이 들어올 때가 문제였다.
top
size
empty
pop
pop
pop
size
empty
pop
다른 입력은 이렇게 들어와서 String.split으로 쪼개기에는 곤란했다.
그래서 StringTokenizer라는 클래스를 발견했다.
StringTokenizer 속 method
constructor / method | 설명 |
StringTokenizer(String str, String delim) |
delim을 구분자로 하여 str을 나누어 StringTokenizer을 생성한다. |
StringTokenizer(String str, String delim, boolean returnDelims) |
delim도 토큰으로 StringTokenizer을 생성한다. |
countTokens() | 토큰의 수를 int로 반환 |
hasMoreElements() / hasMoreTokens() |
토큰 소지 여부를 boolean으로 반환 |
nextToken() / nextElement() |
토큰을 한 개 씩 String(Object)로 반환하고 읽은 토큰은 제거된다. |
StringTokenizer 예제
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int commandCount = Integer.parseInt(br.readLine()),
point = -1;
StringTokenizer st;
List<Integer> arr = new ArrayList<Integer>();
for(int i = 0; i < commandCount; i++) {
st = new StringTokenizer(br.readLine(), " ");
switch(st.nextToken()) {
case "push":
point++;
arr.add(Integer.parseInt(st.nextToken()));
break;
case "pop":
if(point == -1) {
bw.write(String.valueOf(-1));
bw.newLine();
}else {
bw.write(String.valueOf(arr.remove(point)));
point--;
bw.newLine();
}
break;
case "size":
bw.write(String.valueOf(point + 1));
bw.newLine();
break;
case "empty":
if(arr.isEmpty()) {
bw.write(String.valueOf(1));
bw.newLine();
}else {
bw.write(String.valueOf(0));
bw.newLine();
}
break;
case "top":
if(point == -1) {
bw.write(String.valueOf(-1));
bw.newLine();
}else {
bw.write(String.valueOf(arr.get(point)));
bw.newLine();
}
break;
}
}
bw.close();
}
}
예제 설명
StringTokenizer st;
st = new StringTokenizer(br.readLine(), " ");
switch(st.nextToken()) {
case "push":
point++;
arr.add(Integer.parseInt(st.nextToken()));
break;
}
push 1이 입력이 들어왔을 때
" "을 기준으로 StringTokenizer을 생성한다.
이후 switch문에서 nextToken()을 이용하여 push를 반환받고,
nextToken()을 한 번 더 이용하여 1을 반환받는다.
이와 같이 라인 단위로 입력을 받아오는 BufferedReader을 이용할 때
구분자 기준으로 쪼개지는 String의 수가 일정하지 않을 때 용이하다.
728x90
반응형
'개발 공부 > JAVA' 카테고리의 다른 글
[JAVA] BigInteger을 이용한 큰 수 연산 (0) | 2021.09.15 |
---|---|
[JAVA] List.sort() 정렬(오름차순, 내림차순) - Comparator 이용 (0) | 2021.09.12 |
20일차 executeQuery, next (0) | 2021.04.10 |
19일차 connection + Null Pointer Exception (0) | 2021.04.10 |
11~12일차 레퍼런스 데이터 타입 사용 실습 (0) | 2021.04.07 |