java按字节截取字符串_qq_32424581的博客-CSDN博客_java按字节截取字符串

按字节分割字符串

后台数据库有时不能使用CLOB存储数据的时候,而当字段长度很长时,需要将导入报表的的长字符串分割为更小的字符串存到多个字段中,这时如果使用substring的话,字符串中的中文情况下,由于数据库字符类型存储字节数的限制,以oracle的varchar2为例,长度最长为4000字节,会造成字段长度不够的异常。这时需要以字节为单位分割字符串。

代码如下:

    private List<String> splitStringToListByByte(String srcStr, int byteLimit) throws Exception{
        List<String> strList = new ArrayList<String>();
        int startIndex = 0;
        int strLength = srcStr.length();
        int endIndex = byteLimit > strLength ? strLength : byteLimit;
        String tmp = srcStr.substring(startIndex, endIndex);
        while(endIndex <= srcStr.length()) {
            while(tmp.getBytes("gbk").length > byteLimit) {
                // 当前分割串字节超过分割限制,回退分割下标endIndex,重新分割继续判断
                tmp = srcStr.substring(startIndex, --endIndex);
            }
            strList.add(tmp);
            startIndex = endIndex;
            endIndex = endIndex + byteLimit > strLength ? strLength : endIndex + byteLimit;
            if (startIndex == endIndex) {
                // 分割开始下标与结束下标相同时,整个字符串分割完毕,退出。
                break;
            }
            tmp = srcStr.substring(startIndex, endIndex);
        }
        if (strList.size() < 1) {
            strList.add("");
            strList.add("");
            strList.add("");
        }
        if (strList.size() < 2) {
            strList.add("");
            strList.add("");
        }
        if (strList.size() < 3) {
            strList.add("");
        }
        return strList;
    }

使用:长字段分割为长度为3的字符数据数组,分别导入数据库

                    List<String> strings = splitStringToListByByte(errorContent, 3967);
                    qualityInspectionReportDTO.setErrorContentField1(strings.get(0));
                    qualityInspectionReportDTO.setErrorContentField2(strings.get(1));
                    qualityInspectionReportDTO.setErrorContentField3(strings.get(2));

原网址: 访问
创建于: 2022-04-18 16:40:17
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论