[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;