고래씌

[JAVA] 11-2. 기본 API(2) (StringTokenizer, StringBuffer, StringBuilder 클래스) 본문

JAVA/JAVA 기초

[JAVA] 11-2. 기본 API(2) (StringTokenizer, StringBuffer, StringBuilder 클래스)

고래씌 2023. 10. 19. 11:55

1. 구분자를 제시해서 해당 문자열을 분리시키는 방법

(방법 1). 분리된 문자열들을 String[]배열에 담아서 관리하는 방법

▶ 문자열.split(구분자) : String[]

 

ex)

String str = "Java Oracle JDBC HTML CSS JavaScript Server";

String[] arr = str.split(" ");

for(int i=0; i<arr.length; i++) {
    System.out.println(arr[i]);
}

 

 

▶ 배열, 컬렉션은 for문을 다음과 같이 사용 가능.(향상된 for문)

[표현법]
for( 순차적으로 접근한 인덱스의 값을 담아줄 참조변수   :  순차적으로 접근할 배열 ) {
     실행할 코드
}

 

향상된 for문

: 인덱스에 순차적으로 접근하기위한 목적으로만 사용할 것을 권장

 

ex)

String str = "Java Oracle JDBC HTML CSS JavaScript Server";

String[] arr = str.split(" ");

for(String s : arr) {
     System.out.println(s);
}

 

 

 

(방법2). 분리된 각각의 문자열들을 토큰으로 취급하고 싶을때

: java.util.StringTokenizer클래스를 이용한다.

 

ex)

String str = "Java Oracle JDBC HTML CSS JavaScript Server";
StringTokenizer stn = new StringTokenizer(str, " ");

System.out.println("분리된 문자열의 개수 : " + stn.countTokens());

// 현재 token의 순서 1
System.out.println(stn.nextToken());
// 현재 token의 순서 2
System.out.println(stn.nextToken());

...

System.out.println(stn.nextToken());

 

☞ 알아서 카운터 값을 증가 시켜서 다음 문자열을 출력함

 

ex) 이런 방법도 있다

String str = "Java Oracle JDBC HTML CSS JavaScript Server";
StringTokenizer stn = new StringTokenizer(str, " ");

 

int count=0;
int totalTokens = stn.countTokens();
while(stn.hasMoreElements()) {   // 다음토큰이 존재하면 true, 없으면 false
       System.out.println(stn.nextToken());
       count++;
}

 

 

2. StringBuffer 와 String Builder? 

▶ String을 불변클래스 imutable
▶ StringBuffer 와 String Builder? mutable 클래스(가변클래스)
    문자열을 저장할 때 해당 메모리에서 수정을 함 => 메모리 저장공간을 훨씬 아낄 수 있다!

 문자열 연산이 빈번하게 일어나는 프로세스 / 알고리즘에서 발생하는 메모리 이슈를 해결하기 위해 나온 클래스

 

StringBuffer는 멀티스레드환경에서 유용하며 StringBuilder는 싱글스레드환경에서 유용하다.

 

(1) String 저장공간

ex 1) 

String str = "hello";  // 저장공간 그대로 차지하고 있음
str += "world"; // hello world;  

 

ex 2)

StringBuffer sb = new StringBuffer("Hello");
sb.append("World,");

StringBuilder sb2 = new StringBuilder("Hello");

System.out.println(sb.toString());
System.out.println(sb2);

 

(2) 문자열의 길이 및 위치

문자열.length()

문자열.indexOf()

 

ex1)

StringBuffer sb = new StringBuffer("Hello");

System.out.println("sb의 길이는? " + sb.length());
System.out.println("o의 위치는? " + sb.indexOf("o"));

 

 

ex2)

String filename = "TEST.ABC.txt";
String filename2 = filename.substring(0,filename.lastIndexOf("."));

 

StringBuffer sb = new StringBuffer("HelloWorld");
System.out.println("o의 마지막 위치는? " + sb.lastIndexOf("o"));
System.out.println("TEST.ABC.txt에서 확장자를 제외한 파일명? " + filename2);

 

 

(3) 인덱스위치의 문자를 없애는 메소드
마지막위치의 문자를 없애고 싶다?
마지막 위치 => 문자열의 길이 -1

(1)

StringBuffer sb = new StringBuffer("HelloWorld,");

sb.deleteCharAt(sb.length()-1);
System.out.println(sb);

 

(2) 내가 원하는 위치의 인덱스부터 내가 정한 마지막 인덱스까지 삭제
     시작인덱스 <= 인덱스 범위 < 종료인덱스

 

StringBuffer sb = new StringBuffer("HelloWorld,");

System.out.println(sb.delete(1, sb.length()));
System.out.println("sb : "+ sb);