티스토리 뷰
저를 포함한 초보자 분들에게 도움이 됐으면 좋겠습니다.
초보자 분들은 수박 겉핥기 식으로 알고 넘어가지 마시고, 조금이라도 왜 이렇게 프로그램이 돌아가는지알고 가시는 시간이 됐으면 좋겠습니다.
자바 뜯어보기 - 입력편(BufferedReader) 보셨는지요?
안보고 오셨다면 한번 보고 오시는 것도 좋습니다.
http://sims-solve.tistory.com/3?category=747624
블로그 키워드를 보니 '입력'으로 유입하시는 분들이 많더라구요.
입력방법을 크게 Scanner, BufferedReader 두가지 뜯어봤는데요. 대게 BufferReader를 많이 사용해요. 왜냐면 입력편에서 말했듯 속도를 무시 할 수 없습니다.
그래서 이번편은! 입력을 받은 걸 어떻게 처리 할 수 있는지 알아보도록 합시다.
1. 혹시 1993-05-02를 입력으로 받아 년/월/일로 나눈다면 어떻게 하실 건가요?
(1) public static void main(String[] args) throws IOException { String k = "1993-05-02"; System.out.println(k.substring(0,4)+" "+k.substring(5,7)+" "+k.substring(8,10)); }
혹시나 (1)코드처럼 처리 하실껀가요?
그럼 만약에 1993-5-2로 입력이 들어오면 어떻게 할껀가요?
또 다시 다르게 처리를 해줘야 합니다. 이렇게 특정 문자로 구분되어있는 문자열을 아주 쉽게 처리할 수 있는 방법을 제시하는 클래스가 있습니다. StringTokenizer라는 아주 유용할 클래스가 존재합니다.
String은 문자열을 나타내며 Tokenizer는 낱말분석이라는 뜻입니다. 즉 문자열을 분석한다는 소리죠.
StringTokenizer는 사용자가 설정한 구분문자를 기준으로 나누어 출력을 할 수 있도록 도와줍니다.
예시를 봅시다.
(2) public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(),"-"); while(st.hasMoreTokens()) { System.out.print(st.nextToken()); } }//최종출력 : 19930502
(2)코드와같이 사용 가능합니다. 일단 입력 BufferedReader는 우리가 일반적으로 사용하듯 만들어 주면 됩니다. new StringTokenizer(String , delim(구분문자))로 구성이 되는데 우리는 입력을 받은 것을 처리 하므로 br.readLine()을 넣어 주고 "1993-05-02"에서 "-"구분문자를 기준으로 자르고 싶으니
구분문자를 "-"로 설정해 주면 됩니다.
자 설정은 끝났습니다. 이제 문자열을 분석해 보죠.
(3) public boolean hasMoreTokens() { newPosition = skipDelimiters(currentPosition); return (newPosition < maxPosition); }
일단은 .hasMoreTokens()입니다. (3)코드에서 보듯이 아주 간단합니다. 여기서 newPositio은 뽑아야될 문자의 위치입니다. maxPosition은 문자의 길이 - 1(0부터시작)를 뜻하구요.
즉, 뽑아야 할 문자가 있다면 true를 반환하게 됩니다. 예시로 설명드리죠.
1993-05-02가 있다면 처음 newPosition은 0입니다. nextToken()을 하게되면 구분문자"-"의 다음을 가리키게 되죠.
그럼 두번째 newPosition은 5, 같은 방법으로 하면 세번째 newPosition은 7, 네번째는 9가 됩니다.
9가되면 maxPosition과 같기에 false를 리턴하여 마무리합니다.
그 다음은 nextToken()메소드 입니다.
nextToken은 설정된 구분문자의 위치를 알아내어 문자을 처리하는 역할을 하죠.
조금 더 자세히 StringTokenizer를 뜯어볼까요?
(4)class StringTokenizer implements Enumeration
기본적으로 StringTokenizer클래스 안에는 (4)코드처럼 문자들을 쪼개기위해 여러가지 변수들이 있습니다. 이 변수들을 적절하게 사용하여 문자를 출력해주는 것이죠.
변수가 어떤 역할을 하는지는 주석으로 처리해 놓았으니 참고하시길 바랍니다.
(5) public String nextToken() { currentPosition = (newPosition >= 0 && !delimsChanged) ? newPosition : skipDelimiters(currentPosition); delimsChanged = false; newPosition = -1; if (currentPosition >= maxPosition) throw new NoSuchElementException(); int start = currentPosition; currentPosition = scanToken(currentPosition); return str.substring(start, currentPosition); }
(5)코드가 nextToken 메소드인데요. scanToken을 통하여 설정한 구분자 위치를 찾아내고
String.substring를 사용하여 구분자 전까지 문자열을 리턴해 주네요.
이처럼 StringTokenizer를 사용하게 된다면 손쉽게 구분자가 있는 문자열들은 처리 할 수 있습니다.
필자가 가장 많이 사용하는 경우는 생각보다 " "(띄어쓰기)로 문자열을 구분하여 처리해야 하는 경우가 많은데 이 경우 StringTokenizer로 많이 처리합니다.
여러분들도 StringTokenizer로 문자열을 현명하게 처리 할 수 있길 바랍니다.
'JAVA' 카테고리의 다른 글
[JAVA]7. 자바 뜯어보기 - 오버라이딩(Overriding)/오버 로딩(Overloading)/하이딩(hiding) (0) | 2018.08.30 |
---|---|
[JAVA]6. 자바 뜯어보기 - 상속 (0) | 2018.08.29 |
[JAVA]5. 자바 뜯어보기 - 클래스편 (0) | 2018.08.28 |
[JAVA]4. 자바 뜯어보기 - 자료형편 (0) | 2018.08.27 |
[JAVA]3. 자바 뜯어보기 - 입력편(BufferedReader) (0) | 2018.08.25 |
- Total
- Today
- Yesterday
- GIT
- 티스토리챌린지
- java
- YOLO
- c3k2
- 백준
- Tree
- V11
- 오류
- 도커
- GNN
- 뜯어보기
- yolov11
- python
- 자바
- 알고리즘
- 이미지
- 욜로
- 디텍션
- CNN
- docker
- 초보자
- 정리
- 딥러닝
- DeepLearning
- 깃
- 오블완
- github
- 어탠션
- YOLOv8
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |