언어/JAVA

자바 문자열 분리, 구분: split, StringTokenizer 차이

Iam_im2 2022. 6. 9. 18:51
728x90

1. split()

ㆍStirng 클래스 메소드
ㆍ지정한 구분자로 문자열을 나눠 배열에 저장
ㆍ구분자로 여러개 사용시 |(파이프) 사용
ㆍ구분자에 정규식도 많이 사용한다.
ㆍ예) 공백을 구분자로 문자열을 나눠 배열 arr에 저장

<split 예시>

package stringTokenizerTest;

public class SplitTest {

	public static void main(String[] args) {
		String text = "Happy day";
		String arr [] = text.split(" ");
		
		//foreach문으로 arr배열 출력
		for(String showArr : arr) {
			System.out.println(showArr);
		}
		
		System.out.println();
		
		String text2 = "대한&민국!만세";
		String arr2 [] = text2.split("&|!");	
		
		//for문으로 arr2배열 출력
		for(int i = 0; i < arr2.length; i++) {
			System.out.println(arr2[i]);
		}

	}
}


/*
<출력>
Happy
day

대한
민국
만세

*/

 


 

2. StringTokenizer

ㆍjava.util 의 메서드
ㆍ한 종류의 구분자로 문자열 분리할 때 사용
ㆍ구분자 미지정시 default값은 공백(Space)

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

(2) 메소드 종류
ㆍ구분자에 의해 구분되는 덩어리들을 Token(토큰)이라 명명
ㆍnextToken() : 리턴타입 String, Token을 하나씩 꺼낸다.
ㆍhasMoreTokens() : 리턴타입 boolean, 남은 토큰있나 여부
ㆍcountTokens() : 리턴타입 int, 꺼내지 않아서 남아있는 토큰 수
ㆍ남은 토큰이 없으면 java.util.NoSuchElementException 에러 발생

(3) StringTokenizer  예제

package stringTokenizerTest;

import java.util.StringTokenizer;

//StringTokenizer

public class StringTokenizerTest {

	public static void main(String[] args) {
		String text = "대한-민국-만세";

		// 1: 전체 Token 수를 얻어 for문으로 출력
		StringTokenizer st = new StringTokenizer(text, "/");
		int restOfTokens = st.countTokens();  //남아있는 토큰 수
		for (int i = 0; i < restOfTokens; i++) {
			String nextToken = st.nextToken();  //다음 토큰 출력
			System.out.println(nextToken);
		}

		System.out.println();

		// 2: 남아 있는 Token 확인하고 while문으로 출력
		st = new StringTokenizer(text, "-");
		while (st.hasMoreTokens()) {
			String nextToken = st.nextToken();
			System.out.println(nextToken);
		}
	}
}
/*
대한-민국-만세

대한
민국
만세
*/




 

3. 기타

ㆍ문자입력받을 때 nextLine사용금지

ㆍnextLine은 엔터키를 먹어버리고, 제대로 작동안한다.
ㆍfor문이 제대로 동작하질 않길래 뭐가 문제인가 찾아봤더니 nextLine이 문제였다. nextLine을 next로 바꿔버리면 대부분의 문제가 해결된다.



 

참고 자료

moveuk.log

도서 자바의 정석, 남궁석



 

728x90

'언어 > JAVA' 카테고리의 다른 글

BufferedReader/ BufferedWriter/ StringBuilder 차이  (0) 2022.06.09
for each문  (0) 2022.04.20
Eclipse 이클립스 폰트 변경  (0) 2022.04.14
가위바위보(Rock-Paper-Scissors Game)  (0) 2022.04.07
숫자를 입력 받는 Timer  (0) 2022.04.07