자바 한글 길이(바이트수) 확인하는 방법

Posted by Breeze24
2016. 6. 5. 00:27 Java
자바 한글 길이(Byte) 확인하는 방법

자바에서 한글이 포함되는 문자열의 길이는 어떤 방법으로 찾아야 하는가?


순서

1. 한글 문자열 길이 확인 방법

2. 한글 깨지지 않고 SUBSTRING 사용하기



1. 한글 문자열 길이 확인 방법

아래의 코드를 보자


자바 한글 길이


어떤 결과가 나왔을거 같은가?

temp.length()는 24

temp.getBytes().length는 35가 나온다. 

String의 문자열의 길이와 바이트의 길이를 확인할 때 다르게 나온다. 

일반적으로 DB에 insert할 때는 getBytes().length로 해야 insert시의 오류를 줄일 수 있다. 


2. 한글 깨지지 않고 SUBSTRING 사용하기

 한글이 포함된 문자열에서 문자열을 추출한다면 끝 문자가 ?로 표시되는 경우가 있다. 

한글 한 글자가 3바이트라 하고, 10바이트를 추출한다고 할 때  한글이 9바이트에서 시작한다고 가정하자. 

한글은 9~12바이트 위치에 있기 때문에 10바이트까지 추출한다고 하면 해당 바이트는 깨져서 보이게 된다. 

.

아래 소스는 추출할 바이트에 한글이 깨지지 않는 선에서 가장 가까운 문자열을 추출하는 소스이다.  


	public static void main(String[] args) throws Exception {
		
		String data = "서울시 노원구 중계1989동 20001동 1999호";
		int hangulByte = 2;  //인코딩을 고려한 한글 1자의 바이트수
		int maxLength = 30; //최대 추출할 바이트 길이
		
		System.out.println(cutHangul(data, hangulByte, maxLength));
	}	
	
	
	public static String cutHangul(String inputString, int hangulByte,
			int maxByte) {

		byte[] inputByte = inputString.getBytes();
		int cutByte = 0;
		for (int i = 0; i < inputString.length() - 1; i++) {
			if (isIncludeHangul(inputString.substring(i, i + 1))) {
				if (cutByte + hangulByte > maxByte) {
					break;
				}
				cutByte += hangulByte;
			} else {
				if (cutByte + 1 > maxByte) {
					break;
				}
				cutByte += 1;
			}
		}
		System.out.println(cutByte+" 바이트까지 추출");
		return new String(inputByte, 0, cutByte);

	}
         public static boolean isIncludeHangul(String input){
		for (int k = 0; k < input.length(); k++) {
			if(Character.getType(input.charAt(k))==Character.OTHER_LETTER){
				return true;
			}
		}
		return false;
		
	}
.