Split() 과 StringTokenizer

김태완·2023년 7월 4일

자바 공부

목록 보기
1/2
post-thumbnail

[한빛미디어] 신용권의 Java 프로그래밍정복 이것이 자바다 1,2 참고로 정리함.

문자열이 특정 구분자(delimiter)로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는 String의 split() 메서드를 사용하거나, java.util 패키지의 StringTokenizer 클래스를 이용할 수 있다. split()은 정규 표현식으로 구분하고, StringTokenizer는 문자로 구분한다는 차이점이 있다.

  1. split() 메서드

String 클래스의 split() 메서드는 다음과 같이 호출되는데, 정규 표현식을 구분자로 해서 문자열을 분리한 후, 배열에 저장하고 리턴한다.

String[] result = “문자열”.split(“정규표현식”);

ex) 문자열 = 홍길동&이수홍,박연수,김자바-최명호
--> &, 쉼표(,), -를 제외하고 사람 이름인 “홍길동, 이수홍, 박연수, 김자바,
최명호“ 만 따로 뽑아내고 싶을경우 &, 쉼표(,), -를 파이프( | ) 기호로 연결한 정규 표현싱을 매개값으로 제공하면 split() 메소드는 이 기호들을 구분자로 해서 부분 문자열을 추출한다.

String[] names = text.split(“&|,|-”);

전체 코드로 작성해보면

public class StringSplitExample {
   public static void main(String[] args) {
     String text = “홍길동&이수홍,박연수,김자바-최명호“;
     
     String[] names = text.split(“&|,|-”);

     for(String name : names) {
       System.out.println(name);
     }
  }
}

이렇게 작성 할 수 있다.

  1. StringTokenizer 클래스

문자열이 한종류의 구분자로 연결되어 있을 경우, StringTokenizer 클래스를 사용하면 손쉽게 문자열(토큰 : token)을 분리해 낼 수 있다. StringTokenizer 객체를 생성할 때 첫 번째 매개값으로 전체 문자열을 주고, 두 번째 매개값으로 구분자를 주면 된다.

StringTokenizer st = new StringTokenizer(“문자열”,“구분자”);

만약 구분자를 생략하면 공백(Space)이 기본 구분자가 된다.
예를 들어 문자열이 “/”로 구분되어 있을 경우, 다음과 같이 StringTokenizer 객체를 생성할 수 있다.

String text = “홍길동/이수홍/박연수”;
StringTokenizer st = new StringTokenizer(text,“/”);
  • 추가로
    StringTokenizer 객체가 생성되면 부분 문자열을 분리해 낼 수 있는데, 다음 메소드들을 이용해서 전체토큰수, 남아있는 토큰 여부를 확인한 다음, 토큰을 읽으면 된다.

nextToken() 메소드로 토큰을 하나 꺼내오면 StringTokenizer 객체에는 해당 토큰이 없어진다. 만약 더 이상 가져올 토큰이 없다면 nextToken() 메소드는 java.util.NoSuchElementException 예외를 발생시킨다. 그래서 nextToken() 메소드를 사용하기 전에 hasMoreTokens() 메소드로 꺼내올 토큰이 있는지 조사한 후 nextToken() 메소드를 호출하는 것이 좋은 코딩 방법이다.

StringTokenizer로 토큰을 분리하는 2가지 방법에대해 코드를 작성해봄

<방법 1>

import java.util.StringTokenizer;

public class StringTokenizerExample {
    public static void main(String[] args) {
        String text = "홍길동/이수홍/박연수";
        // 방법 1 : 전체 토큰 수를 얻어 for문으로 루핑
        StringTokenizer st = new StringTokenizer(text,"/");
        int countTokens = st.countTokens();
        for(int i = 0; i < countTokens; i++) {
            String Token = st.nextToken();
            System.out.println(Token);
        }
    }
}

<방법 2>

import java.util.StringTokenizer;
public class StringTokenizerExample {   
    public static void main(String[] args) {  
        String text = "홍길동/이수홍/박연수";      
        // 방법 2 : 남아 있는 토큰을 확인하고 while문으로 루핑   
        StringTokenizer st = new StringTokenizer(text,"/");     
        while(st.hasMoreTokens()) {         
            String Token = st.nextToken();      
            System.out.println(Token);     
        }      
    }  
}
```![](https://velog.velcdn.com/images/kimtaeyan21/post/688fafeb-95cd-4953-9977-f75fc2cdba20/image.png)



profile
공부기록

0개의 댓글