/**
     * byte 단위로 substring
     * @param str
     * @param beginIndex 0부터 시작
     * @param endIndex substr할 바이트 수. 2-byte문자의 경우 바이트가 부족하면 그 앞 글자까지만 자름.
     * @param bytesForDB 2-byte문자(한글 등)의 DB에서의 바이트 수. 예를들어 오라클/UTF-8이면 3바이트임
     * @return
     */
    public static String substrb(String str, int beginIndex, int endIndex, int bytesForDB) {
       
        if(str == null)
            return "";
       
        String tmp = str;
        int slen = 0, blen = 0;
        char c;
       
        if(tmp.getBytes().length > endIndex - 1) { // 0부터 카운트 되므로 endIndex - 1
           
            while(blen + 1 < endIndex - 1) {
               
                c = tmp.charAt(slen);
                blen++;
                slen++;
               
                if(c > 127)
                    blen = blen + (bytesForDB - 1); //2-byte character..
            }
           
            tmp = tmp.substring(beginIndex, slen);
        }
       
        return tmp;
    }

public void testStringUtil() {
       
        String str = "한글테스트";
        int bytesForDB = 3;
       
        System.out.println(StringUtil.substrb(str, 0, 9, bytesForDB));
        System.out.println(StringUtil.substrb(str, 0, 8, bytesForDB));
    }