언어/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