Java

JAVA - 문자열 분리 ( StringTokenizer )

비망노트 2022. 6. 29. 14:50

- 자바 입력값 분리 (StringTokenizer)

 

StringTokenizer 
  • 문자열을 공백기준혹은 구분자기준으로 분리하며
    String배열로 반환하는 split 과 다르게 String 타입으로 반환하는 클래스
  • StringTokenizer은 java.util 패키지의 클래스이며, split은 String의 메소드이다.

 

✅ StringTokenizer는 java.util패키지의 클래스이므로 import필요

import java.util.StringTokenizer;
 StringTokenizer 사용방법 3가지
// 1. 문자열을 띄어쓰기 기준으로 분리
StringToKenizer st = new StringToKenizer(문자열);

// 2. 문자열을 구분자기분으로 분리
StringToKenizer st = new StringToKenizer(문자열,구분자);

// 3. 문자열을 구분자 기준으로 분리하는데
//    구분자도 토큰으로 넣을지(true)
//    구분자는 분리된 문자열토큰에 포함 안시킬지(false)  기본값은 false
StringToKenizer st = new StringToKenizer(문자열,구분자,true/false);

1. 문자열을 띄어쓰기 기준으로 분리
import java.util.*;

public class Main {
    public static void main(String args[]) {
    
      String str = "안녕하세요 지금은 2022년 입니다.";
      StringTokenizer st = new StringTokenizer(str); // 분리될 문자열
      
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      
    }
}
/* output
안녕하세요
지금은
2022년
입니다.
*/

✅ 구분자없으면 기본값 공백을 기준으로 분리


 

 

2. 문자열을 구분자기준으로 분리
import java.util.*;

public class Main {
    public static void main(String args[]) {
    
      String str = "장마가&시작&됐네요&.";
      StringTokenizer st = new StringTokenizer(str,"&"); // 문자열, 구분자
      
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      
    }
}
/* output
장마가
시작
됐네요
.
*/

✅ 구분자미포함 false가 기본값이기때문에 생략해주어도 무방


 

 

3. 문자열을 구분자 기준으로 분리하고 구분자 포함여부 선택
import java.util.*;

public class Main {
    public static void main(String args[]) {
    
      String str = "장마가&시작&됐네요&.";
      StringTokenizer st = new StringTokenizer(str,"&",true); // 문자열, 구분자, 구분자포함
      
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      
    }
}
/* output
장마가
&
시작
&
*/

✅토큰을 받아 출력문을 4번 사용했으므로 4개까지만 출력

 

 


 

구분자 여러개
import java.util.*;

public class Main {
    public static void main(String args[]) {
    
      String str = "양배추&라면&&&우유!/&브로콜리!//고구마&";
      StringTokenizer st = new StringTokenizer(str,"!&/"); // 문자열, 구분자
      
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      System.out.println(st.nextToken());
      
    }
}

/* output
양배추
라면
우유
브로콜리
고구마
*/

✅ 구분자는 쉼표구분없이 여러개 줄 수 있다

 


 

 

 

StringTokenizer 메소드
반환값 메소드명 설명
boolean hasMoreTokens() 남아있는 토큰있으면 treu 없으면 false
String nextToken() 객체에서 다음 토큰을 반환
String nextToken(String delim) delimiter:구분자 delim 기준으로 다음 토큰반환
boolean hasMoreElements() hasMoreTokens와 동일한 엘레먼트보다
토큰으로 된 메소드를 주로 씀
Object nextElement() nextToken메소드와 동일하지만
문자열이 아닌 객체를 리턴
int countTokens() 총 토큰의 개수를 리턴

 

// hasMoreTokens(), nextToken(), countTokens()

import java.util.*;

public class Main {
    public static void main(String args[]) {
    
      String str = "양배추&라면&&&우유!/&브로콜리!//고구마&";
      StringTokenizer st = new StringTokenizer(str,"!&/"); // 문자열, 구분자
      
	while(st.hasMoreTokens()){
      	  System.out.println("남아있는 토큰 개수 : "+st.countTokens()+"개");
      	  System.out.println(st.nextToken());
  	}
   }
}

/* output
남아있는 토큰 개수 : 5개
양배추
남아있는 토큰 개수 : 4개
라면
남아있는 토큰 개수 : 3개
우유
남아있는 토큰 개수 : 2개
브로콜리
남아있는 토큰 개수 : 1개
고구마
*/

 

 

StringTokenizer vs split
StringTokenizer split
java.util 패키지의 클래스 String의 메소드
문자로 구분 정규표현식으로 구분
문자열로 받음 문자열배열로 받음
구분자를 포함 할 수 있음 구분자를 포함하지 못함
구분자 여러개 줄 때 분리 X 구분자 여러개 줄 때 | 로 구분

 

 

✅ 추가

str.split("") 로 빈칸이없는부분도 자를 수 있다.

StringTokenizer(str,"")는 안된다

 

 

 

 

 

https://jhnyang.tistory.com/398