Study/java

[Java] String - getBytes, toCharArray

getBytes()

문자열을 byte배열로 변환해주는 메소드입니다.

매개변수로 Charset charset이나 String charsetName을 받기도 합니다.

String str = "abc";
System.out.println("getBytes() : " + Arrays.toString(str.getBytes()));
System.out.println("getBytes(Charset charset) : " 
				+ Arrays.toString(str.getBytes(Charset.defaultCharset())));
		
try {
	System.out.println("getBytes(String charsetName) : " 
    				+ Arrays.toString(str.getBytes("UTF-8")));
} catch (UnsupportedEncodingException e) {
	e.printStackTrace();
}

getBytes 사용결과

String charsetName을 사용하는 경우 예외처리가 필요합니다.

매개변수로 들어온 String이 인코딩 이름이 아닐수도 있기 때문입니다.

 

문자열 abc를 byte배열로 바꾼 결과 [97, 98, 99]이 반환되었습니다.

abc 각 문자의 아스키코드랑 같습니다.

 

 

 

 

그렇다고 모든 문자가 다 아스키코드로 변환되는것은 아닙니다.

String korean = "안녕하세요";
byte[] koreanByte = korean.getBytes();
System.out.println("안녕하세요 -> byte[] : " + Arrays.toString(koreanByte));
System.out.println(new String(koreanByte));

한국어 getBytes 결과

배열 자리수도 원래 문자열 길이와 다르고 실제 해당 문자의 아스키코드도 아닙니다.

하지만 이 배열을 문자열로 변환하면 원래 문자열인 "안녕하세요"가 출력된다.

 

만약 영어 대소문자로 이루어진 문자열을 한번에 아스키코드 번호로 변환하고싶을때

getBytes를 사용하면 좋을것 같습니다.

 

toCharArray() 

문자열을 char배열로 변환해주는 메소드입니다.

String str = "abc";
char[] charArr = str.toCharArray();
System.out.println(Arrays.toString(charArr));

toCharArray 결과

String은 내부에 저장되는 자료형이 char배열이라서

toCharArray의 내부 로직은 단순하게 원래 문자열 개체(char[])를 복사한 값을 리턴합니다.