** 자기 공부용 및 암기용으로 포스팅하는 글 입니다.
** 정확한 정보는 보장 할 수 없으니, 참고용으로만 봐주시면 감사하겠습니다.
** 제 개인적인 생각 및 자기 암시목적으로 작성되기에 이점 양해 부탁드립니다.
들어가기에 앞서..
StringTokenizer, StringBuilder, StringBuffer는 문자열을 다룰 때 유용하게 사용할 수 있는 메서드들을 다룬다.
알고리즘 및 코딩 테스트에서 빈번하게 사용되는 클래스이며, 외워두자.
★ 알아볼 내용
1. StringTokenizer
2. StringBuilder
3. StringBuffer
내용 설명
1. StringTokenizer
문자열을 사용자가 지정한 문자열로 쪼개어 주는 클래스. 사용 방식은 아래와 같다.
import java.util.StringTokenizer;
//공백을 기준으로 str 문자열 쪼개기
StringTokenizer tokenizer_1 = new StringTokenizer(str);
//사용자가 지정한 구분자(,)를 기준으로 문자열 조깨기
StringTokenizer tokenizer_2 = new StringTokenizer(str,",");
사용예제는 아래와 같다.
//StringTokenizer를 사용하기 위해서는 아래를 import 해야한다.
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args){
String str = "This is a string example using StringTokenizer";
StringTokenizer tokenizer = new StringTokenizer(str);
System.out.println(str);
System.out.println();
//분할이 된 토큰들의 개수 조회
System.out.println("total tokens:"+tokenizer.countTokens());
//분할이 된 토큰들의 String 조회
while(tokenizer.hasMoreTokens()){
System.out.println(tokenizer.nextToken());
}
System.out.println("total tokens:"+tokenizer.countTokens());
}
}
위에서 사용한 메서드의 종류로 함께 보도록 하자.
int countTokens()
- 남아 있는 token의 개수를 반환한다. 남아 있는 것인 것을 꼭 인지를 하자
boolean hasMoreElements(), boolean hasMoreTokens()
- 두 개 모두 같은 동작을 한다.
- 현재 위치 뒤에 있는 문자열에서 하나 이상의 토큰을 사용할 수 있는 경우 true 를 반환하고 그렇지 않으면 false 를 반환한다.
Object nextElement(), String nextToken()
- 두 메서드 모두 다음의 토큰을 반환한다.
- nextElement는 Object형을 반환. nextToken은 String형을 반환한다.
어찌보면은 String.split() 과 비슷한 기능을 하는 메서드 이다.
그렇지만 두 개의 매서드에는 명확한 차이점이 존재한다.
만일 "100 200 300" 이라는 문자열을 구분자를" "로 하여 나누게 되면은.
StringTokenizer는 "100","200","300" 으로 총 세 가지가 나타나고
spilt은 "100"," ", " ","200","300"으로 총 5가지가 나타나게 된다.
split은 공백을 무시하지 않고 그 마저도 문자열의 일부로 판단하기 때문.
2. StringBuilder
한번 생성된 Stirng 클래스의 인스턴스는 여러 개의 문자열을 더할 때 마다 새로운 인스턴스를 생성해야 하는 복잡한 과정을 겪는다. 적은 숫자의 문자열을 더하는 것은 성능상으로 문제가 되지는 않지만, 많은 문자열을 더해야하는 상황이 발생할 경우 성능적으로 저하를 일으킬 수 있는 요인이 된다. 우리는 이 점을 해결하기 위해 StringBuilder 클래스를 사용하게 될 것이다.
아래 예시를 보도록 하자.
public class Main {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
String str = stringBuilder.toString();
System.out.println(stringBuilder);
System.out.println(str);
}
}
StringBuilder의 객체를 생성한 후에 append()를 통하여 문자열들을 넣는다.
또한 문자열을 출력할 때 해당 String형의 변수에다가 .toString()를 통해 형변환을 시켜서 넣는작업을 진행한다.
3. StringBuffer
String 클래스의 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있는데, StringBuffer 클래스의 인스턴스는 그 값을 변경할 수 있고 추가할 수도 있다. 이를 위해 내부적으로 버퍼라는 독립 공간을 가지고있다. 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있는 여유공간을 가지고 있다.
StringBuffer에서 주로 사용하는 메서드를 나열하여 공부해 보자.
append()
인수로 전달된 값을 문자열로 변환한 후, 해당 문자열 마지막부분에 추가. String.concat()과 같은 결과를 반환하지만, 내부적으로는 append()가 훨씬 더 처리속도가 빠르다
StringBuffer str = new StringBuffer("Java");
System.out.println("문자열 : " + str);
System.out.println(str.append(" programming"));
System.out.println("append() 메서드 호출 후 문자열 : " + str);
capacity()
StringBuffer 인스턴스의 현재 버퍼 크기를 반환.
StringBuffer크기는 사용자가 지정한 크기 + 16[기본 여유 크기]
StringBuffer str01 = new StringBuffer();
StringBuffer str02 = new StringBuffer("Java");
System.out.println(str01.capacity()); // 16
System.out.println(str02.capacity()); // 20
delete( start, end+1 ) & deleteCharAt( num )
전달된 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거
delete( start, end+1 )의 경우 문자열[start] 지점부터 문자열[end] 지점까지 삭제
deleteCharAt( num ) 의 경우 문자열[num] 부분만 삭제
StringBuffer str = new StringBuffer("JAVA Oracle");
System.out.println("문자열 : " + str); // JAVA Oracle
System.out.println(str.delete(4, 8)); // JAVAcle
System.out.println(str.deleteCharAt(1)); // JVAcle
System.out.println("deleteCharAt() 메소드 호출 후 문자열 : " + str); // JVAcle
insert()
인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 지정된 인덱스 위치에 추가.
StringBuffer str = new StringBuffer("Java Programming!!");
System.out.println(str); // Java Programming!!
System.out.println(str.insert(4, "Script")); // JavaScript Programming!!
System.out.println("insert() 메서드 호출 후 문자열 : " + str); // JavaScript Programming!!
문자열 : Java Programming!!
JavaScript Programming!!
insert() 메서드 호출 후 문자열 : JavaScript Programming!!
참고 자료
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html
'JAVA 지식 및 공부' 카테고리의 다른 글
[JAVA] 객체지향 프로그래밍 : 캡슐화 (0) | 2024.06.09 |
---|---|
[JAVA] 객체지향 프로그래밍 : 상속 (1) | 2024.06.07 |
[JAVA] Collection - 열거형(Enum) 정리 (0) | 2024.05.29 |
[JAVA] Collection - List 개념 & 메서드 정리 (0) | 2024.05.06 |
[JAVA] Integer 클래스의 메소드 정리 (0) | 2024.04.15 |