한모로그 2023. 1. 27. 20:14

String 클래스

  • String 클래스는 문자열을 저장하고 조작할 때 사용
  • 문자열 리터럴은 자동으로 String 객체로 생성. String 클래스의 다양한 생성자를 이용해서 직접 객체를 생성할 수도 있음


    출처, 이것이 자바다


  • 한글 1자를 UTF-8로 인코딩하면 3바이트가 되고, EUC-KR로 인코딩하면 2바이트가 됨
package ch12.sec05;

import java.util.Arrays;

public class BytesToStringExample {

    public static void main(String[] args) throws Exception {
        String data = "자바";

        //String -> byte배열(기본 : UTF-8 인코딩)
        byte[] arr1 = data.getBytes(); //6바이트 관리
//        byte[] arr1 = data.getBytes("UTF-8");
        System.out.println("arr1: " + Arrays.toString(arr1));

        //바이트배열(UTF-8) -> 문자열 변환. 3바이트씩 읽어와야 한다.
        String str1 = new String(arr1);
//        String set1 = new String(arr1, "UTF-8");
        System.out.println("str1: " + str1);

        byte[] arr2 = data.getBytes("EUC-KR"); //4바이트 관리
        System.out.println("arr2: " + Arrays.toString(arr2));

        String str2 = new String(arr2, "EUC-KR");
        System.out.println("str2: " + str2);
    }

}

StringBuilder 클래스

  • 잦은 문자열 변경 작업을 해야 한다면 String보다는 StringBuilder가 좋음
  • StringBuilder는 내부 버퍼에 문자열을 저장해두고 그 안에서 추가, 수정, 삭제 작업을 하도록 설계


    출처, 이것이 자바다



    출처, 이것이 자바다


package ch12.sec05;

/*
 * 문자열 변경작업이 많이 발생이 되는 경우, 성능 향상을 위한다면 StringBuilder클래스를 사용한다.
 * 
 * StringBuffer 클래스도 존재한다. 스레드와 관련되어 있다.
 */

public class StringBuilderExample {

    public static void main(String[] args) {

        /*
        StringBuilder sb = new StringBuilder();
        sb.append("DEF");
        sb.append("DEF");
        sb.append("DEF");
        sb.append("DEF");
        */

        //체이닝 방법
        StringBuilder sb = new StringBuilder()
                    .append("DEF")
                    .append("DEF")
                    .append("DEF")
                    .append("DEF");

        System.out.println(sb);


    }

}

package ch12.sec05;

public class StringBuilderExample2 {

    public static void main(String[] args) {

        String data = new StringBuilder()
                .append("DEF")      // "DEF"
                .insert(0, "ABC")   // "ABCDEF"
                .delete(3, 4)       // "ABCEF" 
                .toString();        // 문자열 변환
        System.out.println(data);
    }

}

StringTokenizer 클래스

  • 문자열에 여러 종류가 아닌 한 종류의 구분자만 있다면 StringTokenizer를 사용할 수도 있음 StringTokenizer 객체를 생성 시 첫 번째 매개값으로 전체 문자열을 주고, 두 번째 매개값으로 구분자를 줌. 구분자를 생략하면 공백이 기본 구분자가 됨


    출처, 이것이 자바다


package ch12.sec05;

import java.util.StringTokenizer;

/* 구분자를 이용한 문자열 추출
 * 1)String 클래스
 * data1.split("구분자")
 * data1.split("정규식")
 * 정규식 : 문자열이 특정패턴으로 구성되어 있는지를 검색할 때 사용하는 문법.

 * 2)StringTokenizer st = new StringTokenizer(data2, "/");
 */
public class StringTokenizerExample {

    public static void main(String[] args) {
        String data1 = "홍길동&이수홍,박연수";
        String[] arr = data1.split("&|,");
        for(String token : arr) {
            System.out.println(token);
        }
        System.out.println();

        String data2 = "홍길동/이수홍/박연수";
        StringTokenizer st = new StringTokenizer(data2, "/");
        while(st.hasMoreTokens()) {
            String token = st.nextToken();
            System.out.println(token);
        }

    }

}