将字符串截取成多段(可以截取的时候只从符号截取)

1、指定长度截取字符串

/**
     * 根据长度切割字符串
     *
     * @param str 要截取字符串
     * @param maxLength 截取长度
     * @return
     */
    public static String[] splitByLength(String str, int maxLength) {
        int len = str.length();

        // 计算切割后的字符串数组长度
        int arrayLength = (int) Math.ceil((double) len / maxLength);

        // 初始化字符串数组
        String[] splitString = new String[arrayLength];

        // 按照指定长度切割字符串
        for (int i = 0; i < arrayLength; i++) {
            int startIndex = i * maxLength;
            int endIndex = Math.min(startIndex + maxLength, len);
            splitString[i] = str.substring(startIndex, endIndex);
        }
        return splitString;
    }

2、截取的时候直只通过标点符号来截取

 /**
     * 指定长度截取字符串,当该截取的位置不是标点符号的时候则向前寻找最近的标点符号进行截取
     * @param str 需要截取的字符串
     * @param maxLength 截取长度
     * @param list 递归储存截取后的字符串
     * @return
     */
    public static List<String> cutString(String str, int maxLength,List<String> list) {
        //当截取长度大于等于字符串长度的时候直接返回
        if (str.length() <= maxLength) {
            list.add(str);
            return list;
        }
        // 从后往前查找符号
        int index = maxLength;
        while (index > 0 && !isSymbol(str.charAt(index))) {
            index--;
        }
        if (index == 0) {
            // 没有符号,直接根据指定长度截取字符串
            list.add(str.substring(0, maxLength));
            //递归调用
            cutString(str.substring(maxLength, str.length()),maxLength,list);
        } else {
            // 找到符号,截取到符号处
            list.add(str.substring(0, index + 1));
            //递归调用继续截取
            cutString(str.substring(index+1, str.length()),maxLength,list);
        }
        return list;
    }

    // 判断字符是否为符号,包含常见的标点符号
    public static boolean isSymbol(char c) {
        return "、,。,!?:;".indexOf(c) != -1;
    }

 

posted @ 2023-08-22 09:19  过氧化氢  阅读(62)  评论(0编辑  收藏  举报