안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^ |
StringTokenizer 클래스
문자열이 특정 구분자로 연결되어 있을 경우 구분자를 기준으로 부분 문자열을 분리하기 위해서는 String의 split () 메서드를 사용하거나 StringTokenizer 클래스를 사용할 수 있습니다.
split()은 정규 표현식으로 구분하고, StringTokenizer는 문자로 구분한다는 차이점이 있습니다.
split() 메서드
정규 표현식을 구분자로 해서 문자열을 분리한 후 배열에 저장하고 리턴.
String[] strs = "문자열".split("정규표현식");
예제를 보겠습니다.
public class StringSplitExample {
public static void main(String[] args) {
String text = "티스토리&블로그,알통몬-포스팅";
String[] names = text.split("&|,|-"); //제외하고 싶은 문자열을 |로 구분하여 작성합니다.
for(String name : names) {
System.out.println(name);
}
}
}
StringTokenizer 클래스
문자열이 한 종류의 구분자로 연결되어 있는 경우, 손쉽게 문자열을 분리할 수 있습니다.
StringTokenizer st = new StringTokenizer("문자열","구분자"); 구분자를 생략하면 공백이 기본 구분자가 됩니다.
문자열이 "/"로 구분되어있을 경우 아래처럼 할 수 있습니다.
ex) String text = "알/통/몬";
StringTokenizer st = new StringTokenizer(text,"/");
StringTokenizer 객체가 생성되면 부분 문자열을 분리해 낼 수 있습니다.
메서드 설명
int countTokens() 꺼내지 않고 남아 있는 토큰의 수
boolean hasMoreTokens() 남아 있는 토큰이 있는지 여부
String nextToken() 토큰을 하나씩 꺼내옴
nextToken() 메서드로 토큰을 하나 꺼내오면 StringTokenizer 객체에는 해당 토큰이 없어집니다.
StringTokenizer 객체에서 더 이상 가져올 토큰이 없다면 nextToken() 메서드는 java.util.NoSuchElementException 예외를 발생시킵니다. 그렇기 때문에 nextToken() 메서드를 사용하기 전에 hasMoreTokens() 메서드로 꺼내올 토큰이 있는지 여부를 조사한 후 nextToken() 메서드를 호출하는 것이 좋은 코딩 방법입니다.
예제)
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) {
String text = "티스토리/블로그/알통몬";
//전체 토큰 수를 얻어 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);
}
System.out.println();
//남아 있는 토큰를 확인하고 while문으로 루핑
st = new StringTokenizer(text, "/");
while( st.hasMoreTokens() ) {
String token = st.nextToken();
System.out.println(token);
}
}
}
=======================================================================================
StringBuffer , StringBuilder 클래스
String은 내부의 문자열을 수정할 수 없습니다. 예를 들어 String 객체를 +연산할 경우
String str = "ABC";
str += "DEF";
의 경우 한 개의 String 객체가 사용된 것이 아닌, "ABC" 에 "DEF" 가 추가된 "ABCDEF" 라는 새로운 String 객체가 생성됩니다. 그리고 str 변수는 새롭게 생성된 String 객체를 참조하게 됩니다.
문자열을 변경하는 작업이 많을 경우 String 클래스를 사용하는 것보다는
java.lang 패키지의 StringBuffer 또는 StringBuilder 클래스를 사용하는 것이 좋습니다.
이 두 가지 클래스는 내부 버퍼에 문자열을 저장해 두고, 그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어 있습니다.
StringBuilder 클래스
몇 가지 생성자를 제공합니다. 기본 생서자인StringBuilder()는 16개 문자들을 저장할 수 있는 초기 버퍼를 만들고, StringBuilder(int capacity) 생성자는 capacity 로 주어진 개수만큼 문자들을 저장할 수 있는 초기 버퍼를 만듭니다. 그리고 StringBuilder는 버퍼가 부족할 경우 자동적으로 버퍼의 크기를 늘리기 떄문에 초기 버퍼의 크기는 크게 중요하지 않습니다. StringBuilder(String str) 생성자는 str로 주어진 매개값을 버퍼의 초기값으로 저장합니다.
StringBuilder strb = new StringBuilder();
StringBuilder strb = new StringBuilder(16);
StringBuilder strb = new StringBuilder("JAVA");
StringBuilder 객체가 생성되었다면 버퍼 내에서 문자 추가, 삽입, 삭제 등의 작업을 할 수 있고 아래 메서드들을 사용하면 됩니다.
append() 와 insert() 메서드는 매개 변수가 다양한 타입으로 오버로딩되어 있기 때문에 대부분의 값을 문자로 추가 또는 삽입할 수 있습니다.
예제)
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("Java ");
sb.append("Program Study");
System.out.println(sb.toString());
sb.insert(4, "2");
System.out.println(sb.toString());
sb.setCharAt(4, '6');
System.out.println(sb.toString());
sb.replace(6, 13, "Book");
System.out.println(sb.toString());
sb.delete(4, 5);
System.out.println(sb.toString());
int length = sb.length();
System.out.println("총문자수: " + length);
String result = sb.toString();
System.out.println(result);
}
}