본문 바로가기

BackEnd/Java

[java] 이것이 자바다 ch12 문자열 클래스

728x90
반응형

1. String

   ▷ 문자열을 저장하고 조작할 때 사용합니다.

   ▷ 문자열 리터럴은 자동으로 String 객체로 생성합니다.

        String 클래스의 다양한 생성자를 이용해서 직접 객체를 생성할 수도 있습니다.

   ▷ 한글 1자를 UTF-8로 인코딩하면 3바이트가 되고, EUC-KR로 인코딩하면 2바이트가 됩니다.

 

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(); // byte[] arr1 = data.getBytes("UTF-8");
		System.out.println("arr1 : " + Arrays.toString(arr1));
		
		// byte → String (기본 : UTF-8 디코딩)
		String str1 = new String(arr1); // String str1 = new String(arr1, "UTF-8");
		System.out.println("str1 : " + str1);
		
		// String → byte 배열 (EUC-KR 인코딩)
		byte[] arr2 = data.getBytes("EUC-KR");
		System.out.println("arr2 : " + Arrays.toString(arr2));
		
		// byte 배열 → String (기본 : UTF-8 디코딩)
		String str2 = new String(arr2, "EUC-KR"); // String str1 = new String(arr1, "UTF-8");
		System.out.println("str2 : " + str2);
		
	}
}

//	출력 : 
//	arr1 : [-20, -98, -112, -21, -80, -108]
//	str1 : 자바
//	arr2 : [-64, -38, -71, -39]
//	str2 : 자바

 

 

2. StringBuilder

   ▷ 효율적인 문자열 조작 기능이 필요할 때 사용합니다.

   ▷ 잦은 문자열 변경 작업을 해야한다면 String보다는 StringBuilder가 좋습니다.

   ▷ StringBuilder는 내부 버퍼에 문자열을 저장해두고 그 안에서 추가, 수정, 삭제 작업을 하도록 설계합니다.

 

NO 리턴 타입 메소드(매개변수) 설명
1 StringBuilder append(기본값 | 문자열) 문자열을 끝에 추가
2 insert(위치, 기본값 | 문자열) 문자열을 지정 위치에 추가
3 delete(시작위치, 끝 위치) 문자열 일부를 삭제
4 replace(시작위치, 끝 위치, 문자열) 문자열 일부를 대체
5 String toString 완성된 문자열을 리턴

 

public class StringBuilderExample {
	public static void main(String[] args) {
		String data = new StringBuilder()
				.append("DEF")
				.insert(0, "ABC")
				.delete(3, 4)
				.toString();
		System.out.println(data);
	}
}

//	출력 : 
//	ABCEF

 

 

3. StringTokenizer

   ▷ 구분자로 연결된 문자열을 분리할 때 사용합니다.

   ▷ 문자열에 여러 종류가 아닌 한 종류의 구분자만 있다면 StringTokenizer를 사용할 수 있습니다.

   ▷ StringTokenizer 객체를 생성시 첫 번째 매개값으로 전체 문자열을 주고, 두 번째 매개값으로 구분자를 줍니다.

   ▷ 구분자를 생략하면 공백이 기본 구분자가 됩니다.

 

   ▷ String에서 split() 메소드 : 구분자 여러 종류가 혼제

   ▷ StringTokenizer 클래스 : 구분자가 하나의 종류만 있는 경우

 

1. split으로 여러개의 구분자를 사용할 때
   ▷ String data = "홍길동 & 이수홍, 박연수, 김자바 - 최명호";
   ▷ String[] names = data.split("&|,|-")

2. 하나의 구분자만 사용할 때
   ▷ StringTokenizer st = new StringTokenizer(data, "/");

 

NO 리턴 타입 메소드(매개변수) 설명
1 int countTokens() 분리할 수 있는 문자열의 총 수
2 boolean hasMoreTokens() 남아 있는 문자열이 있는지 여부
3 String nextToken() 문자열을 하나씩 가져옴

 

 

◎ StringTokenizer 예제

import java.util.StringTokenizer;

public class StringTokenizerExample {

	public static void main(String[] args) {
		String data1 = "홍길동&이수홍,박연수";  // 구분자가 여러 종류일 경우
		String[] arr = data1.split("&|,"); // 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);
		}
	}
}

//	출력 : 
//	홍길동
//	이수홍
//	박연수
//	
//	홍길동
//	이수홍
//	박연수

 

String 클래스들은 기존에 사용하던 split 등의 함수들과 같은 기능을 가지고 있습니다!

 

제가 원하는 때에 따라서 사용할 수 있는 범위가 달라질 수 있겠어요!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

728x90
반응형