首页 > 其他分享 >将字符串截取成多段(可以截取的时候只从符号截取)

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

时间:2023-08-22 09:34:08浏览次数:37  
标签:成多段 截取 list int str maxLength 字符串

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

 

标签:成多段,截取,list,int,str,maxLength,字符串
From: https://www.cnblogs.com/liangyy09/p/17647636.html

相关文章

  • 最大重复子字符串
    给你一个字符串sequence,如果字符串word连续重复k次形成的字符串是sequence的一个子字符串,那么单词word的重复值为k。单词word的最大重复值是单词word在sequence中最大的重复值。如果word不是sequence的子串,那么重复值k为0。给你一个字符串sequence......
  • C++ 字符串类 string
    @TOC前言在C++中,字符串是一种常见的数据类型,用于存储和操作文本数据。C++标准库中提供了std::string类,它是一个功能强大的字符串类,提供了丰富的方法和操作符,使我们能够轻松地处理字符串。一、string类型概括std::string是C++标准库中定义的字符串类,它在<string>头文件中声明。它......
  • 当字符串中含有%,先使用 encodeURI 进行编码,再使用decodeURI解码报错
    报错原因:decodeURI不允许参数有%,它会自动把%25转义为%,这个转义后的%导致的报错解决方法一在解码decodeURI之前将%替换为%25编码:url=encodeURI(encodeURI(url));解码:url=url.replaceAll("%","%25");url=decodeURI(decodeURI(url));解决方法二在编码encodeURI之前就将%......
  • python判断字符串是否包含子串的五种方法
    python判断字符串是否包含子串的五种方法一、用find()方法判断要判断某一个字符串是否包含某一个子串,方法之一是可以利用python内置的字符串方法find()来查找,如果查找到,就返回子串第一个字符在原字符串中的索引位置,如果找不到,则返回-1,实例代码如下:>>>string='笨鸟工具,x1y1z1......
  • Oracle数据库经纬度坐标查询优化与结果错误原因分析、SQL中WKT超长文本字符串处理
    目录一、Oracle几何空间数据对象和其他数据库的差异二、Oracle查询一个经纬度坐标是否在边界内部2.1查询条件2.2查询结果错误,似乎是仅做了MBR匹配2.3错误原因2.4解决办法三、SQL中WKT超长文本在Oracle中如何编写3.1Oracle中执行含超长文本的SQL报错3.2使用CLOB无限拼接得到......
  • 【算法】用c#实现自定义字符串编码及围栏解码方法
    编写一个函数/方法,它接受2个参数、一个字符串和轨道数,并返回ENCODED字符串。编写第二个函数/方法,它接受2个参数、一个编码字符串和轨道数,并返回DECODED字符串。然后使用围栏密码对其进行解码。这种密码用于通过将每个字符沿着一组“竖状轨道”依次放在对角线上来对字符串进行编......
  • 常见字符串操作指令
    常见的字符串操作指令在x86汇编中有很多,以下是其中一些常见的指令:MOVSB/MOVSW/MOVSD:将一个字节/字/双字从源地址复制到目的地址,并递增源和目的指针。REPMOVS:重复执行MOVSB/MOVSW/MOVSD指令,用于复制整个字符串。STOSB/STOSW/STOSD:将一个字节/字/双字的值存储到目的地址......
  • 2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一
    2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数,你可以把任意连续的一段子串,变成'W'、'A'、'S'、'D'组成的随意状态,目的是让4种字符词频一样。返回需要修改的最短子串长度。完美走位问题。输入:s="QQQW"。输出:2。解释:我们......
  • 2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一
    2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数,你可以把任意连续的一段子串,变成'W'、'A'、'S'、'D'组成的随意状态,目的是让4种字符词频一样。返回需要修改的最短子串长度。完美走位问题。输入:s="QQQW"。输出:2。解释:我们可以把前......
  • 哈希表——解205. 同构字符串及290. 单词规律
    205.同构字符串此题是「290.单词规律」的简化版,需要我们判断s和t每个位置上的字符是否都一一对应,即s的任意一个字符被t中唯一的字符对应,同时t的任意一个字符被s中唯一的字符对应。这也被称为「双射」的关系。以示例2为例,t中的字符a和r虽然有唯一的映射o,但对......