본문 바로가기
개발자 양성과정 필기노트/JAVA

String / StringBuffer, StringTokenizer

by jono 2021. 10. 10.

   I. String클래스   


 # String 클래스의 메서드 

1. length()

2. equals() - 대소문자를 구별하여 두 문자열을 비교함

3. equalsIgnoreCase() - 대소문자를 무시하고 두 문자열을 비교함

4. charAt(인덱스) - 해당 인덱스에 위치한 문자1개를 리턴함

5. substring()

  • substring(시작인덱스) - 시작인덱스부터 모든 문자열을 추출함
  • substring(시작인덱스, 끝인덱스) - [시작인덱스 이상] [끝인덱스 미만]에 해당하는 문자열을 추출함

6. concat(추가할 문자열) 

7. indexOf( "인덱스를 찾고자하는 문자" ) - [지정한문자]의 인덱스를 리턴함 / 없으면 -1을 리턴함.

8. lastIndexOf("인덱스를 찾고자하는 문자") - 탐색을 뒤에서부터 역순으로 검색하여 [지정한문자]의 인덱스를 리턴함.
                                                        - 주의!) 인덱스는 항상 같으므로 indexOf()와 리턴값은 같음.

9. replace("치환대상","변경할 문자") - [치환대상문자]의 자리를 [변경할문자]로 대체한다.

10. toUpper(), toLower()

11. trim() - 문자열 앞/뒤의 공백을 제거한다. 사이의 공백은 제거하지 않는다.

12. split( "구분자" ) - "구분자"를 기준으로 문자열을 분리하고 배열에 저장한다

                          - 주의!) 마침표가 구분자인 경우에는 "\\." 형식으로 써야한다.

13. constains("포함되어있는지 확인할 문자") - 주어진 문자열에서 [해당문자]가 있는지 검사한다.

14. String.format() - printf()처럼 문자열을 형식 지정 문자와 결합하여 문자열의 형식을 부여한다. 


# String데이터 비교시 동등비교연산자(==) 와 equals()메서드의 차이

 1) String클래스의 변수로 접근하는 경우 

- 리터럴을 저장할 때 해당 리터럴을 상수 풀에서 검색하여 데이터가 이미 존재하 해당 주소를 리턴하고,
  중복되는 문자열이 없는경우에만 새로 메모리공간을 할당하여 데이터를 저장한다. 

- 때문에 메모리공간을 절약할 수 있다. 

 

 2) String클래스의 인스턴스를 생성하여 접근하는경우 

- 인스턴스를 생성하여 값을 저장하는 경우에는 똑같은 String데이터임에도 불구하고 다른 메모리공간에 할당된다.
- 때문에 동등비교연산자 사용시 false결과가 나온다. ( 동등비교연산자는 주소값을 비교하므로)

- equals() 메서드를 사용하여야 true 결과가 리턴된다. (equals( ) 메서드는 실제 데이터를 비교하므로)

 


   II. StringBuffer / StringTokenizer   


 # 사용처 

- String타입 데이터는 원본 문자열의 수정이 불가능하다. 때문에 문자열의 수정이 빈번한 작업을 할때 String데이터를 사용할 경우 메모리 낭비가 심해진다는 단점이 발생한다.

-> StringBuffer / StringTokenizer 객체를 활용하면 문제해결!

 

 # 개념 

- String클래스와 암시롱 상관없는 클래스이다.

- 반드시 생성자를 통해서만 사용이 가능함!

- Builder Pattern이 가능하다. ( : 자기 자신의 값을 리턴받아 메서드를 연쇄적으로 처리하는 코드작성기법 )


 1) StringBuffer 

 # StringBuffer의  메서드 

1. insert( 인덱스, 삽입할 문자열 ) - 해당인덱스위치에 문자열을 삽입한다.

2. delete( 시작인덱스, 끝인덱스 ) - [시작인덱스 이상] ~ [끝인덱스 미만] 에 해당하는 문자열을 삭제한다.

3. reverse() - 해당 문자열의 순서를 뒤집음

4. append(문자열) - 맨 뒤에 해당문자열을 추가시킨다.

 

 # String <-> StringBuffer 상호변환이 가능하다 

: String인 데이터의 빈번한 조작을 용이하게 하기 위해서는
  먼저 StringBuffer타입으로 변환하여 여러 작업을 처리한 후 다시 String타입으로 원상복구시키면 된다.

 

  1. String -> StringBuffer 변경

    : StringBuffer 생성자에서 String데이터를 전달하면된다.

String str = "Hello World";
StringBuffer sb = new StringBuffer(str);

 

   2. StringBuffer -> String

    : StringBuffer객체의 toString() 메서드를 사용해야한다.

     주의!) 작업이 끝난 후 저장하는 String데이터의 변수명은 기존의 String데이터 변수명과 다르게 지정해야한다.

     (앞에서 설명했듯, StringBuffer와는 달리 String데이터는 값의 변경이 불가능하기때문!)

Stirng str = "Hello";
StringBuffer sbr = new StringBuffer(str);
String str_re = sbr.toString();

 2) StringTokenizer 

 

 # 개념 

- 문자열을 분리하여 토큰을 생성하는 기능을 제공한다.

- 각 토큰은 StringTokenizer타입의 객체로 관리된다.

- StringBuffer와 마찬가지로 객체 자신의 값을 새로이 리턴한다.

 

 # 기본문법 

StringTokenizer st = new StringTokenizer( 원본문자열 , 구분자 );

-> 원본문자열만 전달하고자 할 때는 [구분자]를 공백으로 지정한다.

- 구분자가 마침표일 경우, "." 그대로 사용해도 된다. => String클래스의 split( ) 과 차이점!

- 구분자가 여러개일 경우, [구분자]자리에 다 넣으면 된다. ".,@#$%"

 

 # StringTokenizer의 메서드 

1. countTokens() - 분리된 토큰의 갯수를 int형 데이터로 리턴함.

2. hasMoreTokens() - 현재 토큰 다음으로 토큰이 존재하는지 검사함

3. nextToken() - 현재 토큰 다음의 토큰을 리턴함.

 

import java.util.StringTokenizer;

public class Ex01 {
public static void main(String[] args) {

String str = "자바/JSP%데이터베이스$안드로이드@자바스크립트.스프링";
StringTokenizer st = new StringTokenizer( str,"/%$@." );
System.out.println(st.countTokens()); //6
while(st.hasMoreTokens()){
	System.out.print(st.nextToken()+" "); //자바 JSP 데이터베이스 안드로이드 자바스크립트 스프링
}
}}

 

댓글