문자열분리(Splitter, Delimiter)
1. String.split() 객체 메소드
- 정규 표현식 사용
2. StringTokenizer클래스
- 문자 사용
StringTokenizer 사용예제
-------------------------------------------------------------------------------------------------------
예제1) split() vs StringTokenizer
//String 배열에 비교할 값
String[] txt = new String[4];
txt[0] = "홍길동,20,서울시,남자";
txt[1] = "아무개,25,부산시,남자";
txt[2] = "호호호,23,,여자";
txt[3] = "하하하,,인천시,남자";
for(String line : txt){
String[] temp = line.split(",");
for(String item : temp){
System.out.print(item + "\t");
}
System.out.println();
}
--------------------------------------------
for(String line : txt){
StringTokenizer st = new StringTokenizer(line,",");
while(st.hasMoreTokens()){
System.out.print(st.nextToken() + "\t");
}
System.out.println
}
//1.split()
- 구분자와 구분자 사이에 아무 데이터가 없어도 하나의 요소로 인정(배열의 방을 만들어준다.)
//2.StringTokenizer
- 구분자와 구분자 사이에 아무 데이터가 없으면 요소로 인정안함
- 토큰(token) : 공백이 없는 연속된 문자의 집합 -> 단어
-------------------------------------------------------------------------------------------------------
//split()
- 장점 : 정규 표현식 사용 가능(다양하게 쪼갤 수 있따.)
- 단점 : 속도가 느리다. (정규표현식 떄문에)
//StringTokenizer
- 장점 : 속도가 빠르다.
- 단점 : 정규 표현식 사용 불가능(단순한 문자로만 쪼갤 수 있따. =>원패턴)
주의점
- 자바의 split()은 구분자에 "|"가 오면 구분자로 인식하지 않고 연산자, OR 인식한다
String[] temp = txt.split("\\|"); (O)
String[] temp = txt.split("[|]"); (O)
String[] temp = txt.split("|"); (X)
-split()은 앞의 빈 구분자, 중간의 빈 구분자는 인식 O + 끝의 빈 구분자 인식 x
ex) txt = ",홍길동,,,아무개,하하하,호호호,";
-정규식 사용
ex)txt ="홍길동,아무개---호호호^하하하";
temp = txt.split("[,-^]{1,3}");
//수학(참고)