본문 바로가기
JAVA

Java 문자열(String) 바이트(Byte) 수 세기 (비트 연산자)

by 코딩이라구 2022. 12. 20.

자바(Java)에서 문자열 바이트 수를 세는 방법에 대하여 알아보도록 하겠습니다. 문자열 바이트 수 계산을 위한 방법은 여러 가지 방법이 있지만, 이번에는 비트 단위 연산자를 활용하는 방법에 대하여 다루어보도록 하겠습니다.


Java 문자열(String) 바이트(Byte) 수 계산

 

비트 연산자를 활용한 바이트 수 계산

  • 먼저 비트 연산자를 이용하기 위하여 아스키코드(ASCII) 값을 사용하여 계산하겠습니다. 아스키코드 영문과 숫자의 값은 128보다 작습니다.
    • 영문(소문자 : 97~122, 대문자 : 65 ~ 90)
    • 숫자([0-9] : 48 ~ 57)
  • 비트 연산자 Shit Right(>>)를 통해서 한글 / 영문, 숫자를 판단 후 Byte 수 합산
    (참조 [128] = 1000 0000 , [128 >> 7] = 0000 0001)

 

String str = "a1가b나2";
System.out.println("str = " + str);
		
int totalByte = 0;
// 문자열 길이만큼 반복
for(int i = 0; i<str.length(); i++)
{
	int nStr = str.charAt(i);  // 해당 i번째 문자의 아스키코드값
	System.out.println("\nstr.charAt(" + i + ")" + "[" + str.substring(i,i+1) + "] = " + nStr);
	
	// 비트 연산자를 이용하여 한글/영문,숫자를 판단
	System.out.println("nStr >> 7 = " + (nStr>>7));
	if ((nStr>>7) > 0)
	{
		totalByte += 2;
		System.out.print("[한글 2byte] ");
	}
	else
	{
		totalByte += 1;
		System.out.print("[영문, 숫자 1byte] ");
	}

	// 바이트(byte) 출력
	System.out.println("totalByte = " + totalByte);
}

 

결과

str = a1가b나2

str.charAt(0)[a] = 97
nStr >> 7 = 0
[영문, 숫자 1byte] totalByte = 1

str.charAt(1)[1] = 49
nStr >> 7 = 0
[영문, 숫자 1byte] totalByte = 2

str.charAt(2)[가] = 44032
nStr >> 7 = 344
[한글 2byte] totalByte = 4

str.charAt(3)[b] = 98
nStr >> 7 = 0
[영문, 숫자 1byte] totalByte = 5

str.charAt(4)[나] = 45208
nStr >> 7 = 353
[한글 2byte] totalByte = 7

str.charAt(5)[2] = 50
nStr >> 7 = 0
[영문, 숫자 1byte] totalByte = 8

 

이상으로 자바(Java)에서 문자열(String)의 바이트(Byte) 수를 계산하기 위하여 비트 연산자(Shift)를 활용하는 방법에 대하여 알아보았습니다.

댓글