230731 TIL #151 Java의 String 파싱 방법 / StringTokenizer

김춘복·2023년 7월 30일
0

TIL : Today I Learned

목록 보기
151/571

Today I Learned

코로나 요양중이라 출근을 못했다. 열때문에 머리가 아파서 도저히 코딩은 못하겠어서 코테 준비하다가 본 클래스에 대해 간단히 정리해두려한다.


Java의 String 파싱 방법

  1. substing()

    문자열을 인덱스 기준으로 자르는 메서드.
    indexOf()를 사용해 시작 위치를 찾고 거기서 자르면 된다.

String input = "Hello, World!";
int index = input.indexOf("World");
String result = input.substring(index); // result = "World!"
  1. split()

    문자열을 특정 구분자를 기준으로 분할하는 방법
    인자에 정규식을 넣어 거기에 맞춰서 파싱도 가능하다.

String input2 = "korea,japan,china";
String[] nations = input2.split(",");
  • 단 . 과 같은 메타문자는 \\을 앞에 넣어 \\.라고 써야한다.

  • 구분결과 빈 문자열이 있다면 그것도 하나의 문자열로 인식한다.

  • 반환 결과가 String 배열이다.


자바 공식문서 : StringTokenizer

3. StringTokenizer

말그대로 String을 Token화 하는 클래스
하나의 문자열을 여러개의 토큰으로 분리한다.

  • import java.util.StringTokenizer;
    String 클래스 안에 있는게 아니라 util안의 클래스다.

생성자

// 1. 띄어쓰기 기준으로 분리
StringTokenizer st1 = new StringTokenizer("문자열");

// 2. 구분자를 기준으로 분리
StringTokenizer st2 = new StringTokenizer("문자열", "구분자");

// 3. true면 구분자도 토큰에 포함 / false면 구분자는 미포함(디폴트)
StringTokenizer st3 = new StringTokenizer("문자열", "구분자", true/false);

메서드

반환타입메서드명설명
intcountTokens()총 토큰 개수 반환
booleanhasMoreElements()아래 메서드와 동일
booleanhasMoreTokens()남은 토큰이 있으면 true 반환
ObjectnextElement()아래 메서드와 동일하지만 반환 타입만 Object
StringnextToken()다음 토큰을 반환
StringnextToken(String delim)특정 delim에 따라 다음 토큰 반환

예시

import java.util.StringTokenizer;
 
public class Main {
    public static void main(String[] args)  {
 
        String str = "동해물과 백두산이 마르고 닳도록";
        StringTokenizer st = new StringTokenizer(str);
        
        // 반복문으로 하나씩 토큰 꺼내 출력
        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        /* 출력 :
            동해물과
            백두산이
            마르고
            닳도록
        */
        }
    }
}

split과 차이점

  • st는 java.util안의 클래스, sp는 String 클래스 안의 메서드

  • st는 문자/문자열로 구분하고 sp은 정규식으로 구분.

  • st는 빈 문자열을 토큰으로 인식 x. sp는 빈 문자열도 인식

  • st는 리턴값이 String, sp는 String[] 배열

  • 배열에 담아 반환하는 sp보다 문자열을 바로 잘라주는 st가 다소 속도가 빠르지만 데이터가 많으면 큰 의미는 없다.

profile
Backend Dev / Data Engineer

0개의 댓글