Java프로그래밍

[JAVA] 자바 문자열 자를때 한글이 포함된 경우 getBytes()로  byte 배열 처리 후 Arrays.copyOfRange() 메소드를 이용하여 처리

Pro*C로 개발된 배치서비스를 자바 스프링배치로 변환하는 작업을 하는데 특정경로에 있는 데이터 파일을 읽은 후 문자열을 잘라서 DTO(VO)에 담은 후 데이터베이스에 저장하는 월배치인데 문자열의 총 길이는  693이다.

substring으로 잘라서 파싱 후 저장을 시도하는데 데이터도 안맞고 ArrayIndexOutOfBoundsException이 발생하였다.

이건 분명 데이터 문제이거나 데이터를 자를때 문제가 발생한 것이다. 문자열을 확인해보니 한글이 포함되어 있다. 이건 substring()으로 자르면 안된다.

반드시 byte배열로 변환 후 배열의 특정위치부터 특정위치까지 가져온 후 문자열로 변경해주면 된다.

다음 예제는 한글과 공백이 포함된 문자열이 있을때의 예제이다.

데이터 전문

String temp=”홍길동                  P 01012345678서울H-999      test@gmail.com                        “;

바이트 배열에 담기

Charset charset = Charset.forName(“EUC-KR”));

//StandardCharset.UTF-8

byte[] byteArr = temp.getBytes(charset); //한글 깨짐 방지

Arrays.copyOfRange() 메소드 사용

바이트배열에서 특정 구간 복사 후 String로 변환 해준다.

String name = new String(Arrays.copyOfRange(byteArr, 0, 22), charset));

String mobile = new String(Arrays.copyOfRange(byteArr, 22, 11+22), charset));

문자열을 자를때는 ArrayIndexOutOfBoundsException 오류가 발생할 가능성이 많음으로 try~catch를 이용하여 후속처리작업이 있다면 처리해준다.

코딩방법은 여러가지라 아래와 같이 바이트배열로 변경할 수도 있다.

int tempByteSize= a.getBytes(“UTF-8”).length;

error: Content is protected !!