Java/JAVA

[JAVA] 자바의 substring, split, StringTokenizer

담크 2021. 9. 20. 18:37

오늘은 자바에서 쓰이는 substring, split, StringTokenizer에 대해 공부해보도록 하겠습니다.

 

substring

String s = "The String class represents character strings.";

위와 같은 문자열로 선언된 s가 있다고 할 때

이렇게 사용합니다.

위에서 보면 알 수 있듯 substring은

String.substring(start, end) // 문자열 start위치부터 end전까지의 문자열을 출력

가 됩니다. (이때 end 숫자가 없다면 start위치부터 끝까지 문자열 자르기를 합니다.)

또한 start, end위치는 index값으로 구분하기 때문에 "T" = 0번부터 시작해서 "S" = 4번 ... "g" = 9번, " " = 10번이 되므로 String이 출력되는 것입니다.

 

 

split

split은 나누다 라는 뜻을 가지고 있는데요 실제로 자바에서도 어떤 문자열을 나누어 배열에 저장해 리턴하는데 사용합니다.

String[] tmp = s.split(" ");

이런 식으로 새로운 배열을 선언해 담아줍니다.

위에서는 " "(공백)으로 나누었기 때문에 배열에 하나하나 저장될 때 단어별로 정리가 된 것입니다.

실제로 모든 배열의 값을 출력해보면 확실하게 알 수 있죠 ㅎㅎ

 

 

StringTokenizer

역시 말 그대로 문자열을(String) 토큰화한다(Tokenizer)라고 생각하시면 됩니다.

위 분류에서 알 수 있듯 StringTokenizer의 경우 클래스이기 때문에

import java.util.StringTokenizer;

반드시 위 문장을 임포트 해줘야 합니다!!

 

StringTokenizer사용방법은 3가지가 있습니다.

1. StringTokenizer st = new StringTokenizer(문자열);  => 공백(" ")기준으로 문자열을 분리

2. StringTokenizer st = new StringTokenizer(문자열, 구분자); => 구분자를 기준으로 문자열을 분리

3. StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);

=> 구분자를 기준으로 문자열을 분리하되 구분자를 토큰으로 넣는다면 true, 아니라면 false (기본은 false)

여기서 hasMoreTokens( )는 구분된 토큰이 뒤에 있을 경우를 나타내기 때문에 구분이 더 있다면 while문이 반복되도록 작성했습니다.

 

 

 

여기서만 봤을 때는 split과 StringTokenizer가 같은 용도로 쓰이는데 왜 차이가 날까요??

먼저 split은 비어있는 데이터를 null로 인식하는 방면 StringTokenizer는 비어있는 데이터를 생략해버립니다.

String s3 = "A,B,,C";

이렇게 데이터가 존재할 경우

split

StringTokenizer

두 개가 다르게 출력되는게 보이죠?

 

또 두개가 다른만큼 처리속도는 StringTokenizer가 빠르지만 가변적인 요소가 많은 문자열이나 정확한 분리가 필요한 문자열은 split 메소드를 사용하는 것이 유용합니다.