[Java] split()과 StringTokenizer의 차이

이동엽·2022년 7월 15일
0

java

목록 보기
5/19

Java에서 문자열을 원하는 구분자로 분리하고 싶을때 사용하는 두 가지 방식

  • String 클래스의 split() 메소드
  • java.util에 포함되어 있는 StringTokenizer

split()StringTokenizer
지정한 구분자로 문자열을 나눠 배열에 저장한다지정한 한 가지 구분자로 문자열을 나눌 수 있다
공백 문자열도 포함한다공백 문자열은 포함하지 않는다

split() 사용법

System.out.println("학급 수 N과 학급당 최대 인원수 M을 입력");
String[] str = br.readLine().split(" ");

int N = Integer.parseInt(str[0]);
int M = Integer.parseInt(str[1]);
  • 동작 설명 : 입력 값이 한 줄에 "3 1"과 같이 들어오면, 구분자에 맞춰 split() 메서드로 구분한다.
    • 미리 선언한 String 타입의 배열 str에 저장된다.
    • 입력 값은 String 타입이고, 저장하는 변수는 int 타입이므로 boxing 과정이 필요하다.
    • 최종적으로 N = 3, M = 1이 저장된다.

StringTokenizer 사용법

System.out.println("정점의 개수와 간선의 개수를 입력");
String s = br.readLine();

StringTokenizer st1 = new StringTokenizer(s);

int vCount = Integer.parseInt(st1.nextToken());
int eCount = Integer.parseInt(st1.nextToken());
  • 동작 설명 : 입력 값이 한 줄에 "3 1"과 같이 들어오면, 구분자에 맞춰 StringTokenizer가 분리한다.
    • 위처럼 매개변수에 구분자를 정해주지 않을 경우, s를 공백으로 분리한다.
    • nextToken() 메서드를 통해 분리한 내용을 반환하고, 타입이 다를 경우 boxing 과정이 필요하다.

예제를 통한 결과 비교

입력 값을 경우에 따라 정리하였다. (모든 구분자는 ,로 가정합니다.)

  1. 입력 값이 "데이터 + 구분자 + 데이터" 형태일 경우
    • ex) String str = "soccer,baseball,basketball";

이 경우는, split()과 StringTokenizer의 결과가 일치한다.

  1. 입력 값이 "데이터 + 구분자 + 구분자 + 데이터" 형태일 경우 (중간에 데이터가 없는 경우이다.)
    • ex) String str = "soccer,baseball,,basketball";

이 경우, split()은 공백 문자열도 포함하기 때문에 결과가 일치하지 않는다.

  1. 입력 값이 "데이터 + 구분자 + 데이터 + 구분자" 형태일 경우 (마지막에 구분자가 있는 경우)
    • ex) String str = "soccer,baseball,basketball,";

이 경우, 마지막 구분자는 무시하기 때문에 결과가 일치한다.

속도면에서 비교

  • split() 메서드는 인자로 regex(정규 표현식)을 사용하기 때문에, StringTokenizer가 더 속도면에서 우수하다.
profile
백엔드 개발자로 등 따숩고 배 부르게 되는 그 날까지

0개의 댓글