0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

代码字符串分割方法

科技绿洲 来源:了不起 作者:了不起 2023-09-25 11:42 次阅读

我们写代码的时候,经常会遇到这样一个场景,那就是分割字符串。比如说把一个字符串分成N个,或者说按照N个字符分割。

我们今天就来看看怎么每隔N个字符分割字符串。首先我们就使用 JDK 中内置的 String#split 来分割。

使用 String#split 方法

String 类中 split 方法,是我们平常处理字符串分割最常用的方法之一,它可以根据给定的分隔符或正则表达式将一个字符串分割成多个部分。

我们来看个例子:

public static List< String > usingSplitMethod(String text, int n) {
    String[] results = text.split("(?<=G.{" + n + "})");

    return Arrays.asList(results);
}

我们通过使用正则表达式 "(?<=G.{" + n + "})"来分割字符串,其中表达式中的 n 表示字符的长度。

我们可以通过以下测试用例代码验证这个正则是否有效。

public class SplitStringEveryNthCharUnitTest {

    public static final String TEXT = "abcdefgh123456";

    @Test
    public void givenString_whenUsingSplit_thenSplit() {
        List< String > results = SplitStringEveryNthChar.usingSplitMethod(TEXT, 3);

        assertThat(results, contains("abc", "def", "gh1", "234", "56"));
    }
}

使用 String#substring 方法

String#substring 一般情况我们都是用于截取字符串使用的,这里我们也是可以用来处理字符串的分割,只要循环就行。

public static List< String > usingSubstringMethod(String text, int n) {
    List< String > results = new ArrayList<  >();
    int length = text.length();

    for (int i = 0; i < length; i += n) {
        results.add(text.substring(i, Math.min(length, i + n)));
    }

    return results;
}

我们通过以下测试用例代码来验证。

@Test
public void givenString_whenUsingSubstring_thenSplit() {
    List< String > results = SplitStringEveryNthChar.usingSubstringMethod("abcdefgh123456", 4);

    assertThat(results, contains("abcd", "efgh", "1234", "56"));
}

使用 Pattern

Pattern 类通常来说,我们是用于处理正则表达式,做一些match使用,正如第一种 String#split 方法所见,正则表达式也可以用于分割字符串。这里就展示一下,使用Pattern类来处理字符串分割。

public static List< String > usingPattern(String text, int n) {
    return Pattern.compile(".{1," + n + "}")
        .matcher(text)
        .results()
        .map(MatchResult::group)
        .collect(Collectors.toList());
}

我们使用 .{1,n}构建了一个 Pattern 对象,它能个匹配 1 到 n 个字符, 使用下面的测试用例简单测试一下

@Test
public void givenString_whenUsingPattern_thenSplit() {
    List< String > results = SplitStringEveryNthChar.usingPattern("abcdefgh123456", 5);

    assertThat(results, contains("abcde", "fgh12", "3456"));
}

使用 Guava

到现在为止,我们已经学了几种通过 JDK 相关 API 完成这个操作的方法,下面我们来看看怎么使用 Guava 来实现这个小功能。

public static List< String > usingGuava(String text, int n) {
    Iterable< String > parts = Splitter.fixedLength(n).split(text);

    return ImmutableList.copyOf(parts);
}

Guava 通过 Splitter 类可以很简单的针对我们的这个使用场景,进行字符串分割。这个 fixedLength() 方法为后续的分割提供了固定的分割长度。

我们通过下面的测试用例来测试一下。

@Test
public void givenString_whenUsingGuava_thenSplit() {
    List< String > results = SplitStringEveryNthChar.usingGuava("abcdefgh123456", 6);

    assertThat(results, contains("abcdef", "gh1234", "56"));
}

总结

字符串分割在我们工作中很常用,但大部分情况我们只会使用 String#split , 看到其他的一些情况,是不是感觉有点有趣,没想到字符串分割还能这样玩。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1384

    浏览量

    60997
  • 字符串
    +关注

    关注

    1

    文章

    552

    浏览量

    20135
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66814
  • JDK
    JDK
    +关注

    关注

    0

    文章

    77

    浏览量

    16489
  • string
    +关注

    关注

    0

    文章

    40

    浏览量

    4649
收藏 人收藏

    评论

    相关推荐

    请问如何实现一ASCII码字符串的异或校验和

    如题如何实现一ASCII码字符串的异或校验和例如:$1.2,324.3,123,4*计算$和*之间的异或校验和 最好有框图 谢谢大家了
    发表于 04-10 11:06

    ASCII数字与字符串转换问题。

    本帖最后由 5612355653 于 2016-10-14 09:01 编辑 大神们好:请问:1、如何将10进制数字1234转换成16进制ASCII码字符串31 32 33 34显示?2、如何将10进制字符串1234转换成16进制ASCII
    发表于 10-14 08:36

    数据转换、SQL存储,十六进制字符串、正常字符串

    到了这个方法方法:将所有乱码的 ,不乱码的数据显示成十六进制,如下图所示,把正常显示的字符串更换为16进制显示,当显示为16进制字符串时,字符串
    发表于 05-27 10:29

    字符串拆分

    的使得转换为数值后没法显示如图一,后来又尝试用扫描字符串分割如图二,会报错“输入字符串包含的数据不符合预期格式”请教大佬指点一下,怎么分割这个数据。
    发表于 05-22 11:57

    荣小菜补钙记第45期:报文合成与解析之十六进制字符串与常显字符串的互映射转换

    代码进行分析,详细还请看源代码分享。String2U8的实现逻辑就是字符串分割分割后的字符串
    发表于 09-11 21:21

    求大佬分享STM32F407口接收并解码字符串

    求大佬分享STM32F407口接收并解码字符串
    发表于 12-02 07:46

    字符串字符串数组实现对汉字的分割

    输入字符串,输出字符串数组,实现对汉字的分割.
    发表于 12-23 14:09

    字符串字符数组的转换字符数组介绍

    (data); 2:调用String类的方法转换。String.valueOf(char[] ch); 字符串 -----》字符数组1:有分隔符例如”abc,def,ghi”;直接分割
    发表于 01-12 07:01

    STM32F407口接收并解码字符串方法

    STM32F407口接收并解码字符串usart2.c串口2初始化//初始化串口2//bound:波特率void uart2_init(u32 bound){//GPIO端口设置
    发表于 01-20 07:16

    2.2 python字符串类型

    you name?'>>> msg"what's you name?"2. 常用的方法字符串对象本身自带了许多非常实用的方法,考虑到新手的接受程序,在这里也
    发表于 02-17 17:12

    字符串逆序的方法分享

    分享一道经典的C语言题目。题目:字符串逆序。如:hello world转换为dlrow olleh。流程图:代码:左右滑动查看全部代码>>>/*-程序功能:字符串...
    发表于 02-28 07:17

    python字符串分割技巧

    当我们对字符串进行分割时,且分割符是 \n,有可能会出现这样一个窘境:>>> str = "a\nb\n">>> print(str
    发表于 04-12 15:33

    字符串与ASCII码字符串的相互转换

    本帖最后由 猫仔静2019 于 2022-8-24 10:05 编辑 字符串与ASCII码字符串的相互转换
    发表于 08-24 10:00

    怎么从4mb磁盘保存/加载html代码字符串

    一直无法做到这一点。我在网上看到的教程是针对单行字符串执行此操作的,而我的 html 代码显然是多行字符串。我怎么可能从 4mb 磁盘保存/加载 html 代码字符串
    发表于 02-28 08:28

    oracle字符串split成多个

    Oracle是一种广泛使用的关系型数据库管理系统,它提供了许多强大的功能和函数,用于处理和操作数据。其中之一就是字符串分割(split)方法,该方法用于将一个
    的头像 发表于 12-06 09:54 1144次阅读