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

    文章

    1522

    浏览量

    62506
  • 字符串
    +关注

    关注

    1

    文章

    585

    浏览量

    20622
  • 代码
    +关注

    关注

    30

    文章

    4841

    浏览量

    69194
  • JDK
    JDK
    +关注

    关注

    0

    文章

    82

    浏览量

    16642
  • string
    +关注

    关注

    0

    文章

    40

    浏览量

    4751
收藏 人收藏

    评论

    相关推荐

    如何在bash中分割字符串

    假设我们有一个由逗号或者下划线隔开的多个单词组成的字符串,需要拆分这个字符串提取各个单词。
    发表于 12-07 17:10 3771次阅读

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

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

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

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

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

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

    字符串移位包含的问题解决方案

    问题:给定字符串s和t,判断是否字符串t能通过将s移位后的字符串所包含。 方法一 最简单的方法就是将s进行循环移位,再判断移位后的
    发表于 11-29 10:05 1076次阅读

    新手必知的Python:分割字符串的步骤及源代码

    若你使用过 Shell 中的 awk 工具,会发现用它来分割字符串是非常方便的。特别是多个连续空格会被当做一个处理。
    的头像 发表于 08-25 10:48 2226次阅读
    新手必知的Python:<b class='flag-5'>分割</b><b class='flag-5'>字符串</b>的步骤及源<b class='flag-5'>代码</b>

    什么是复制字符串?Python如何复制字符串

    。 在上一篇文章《你真的知道Python的字符串怎么用吗?》里,我突发奇想,将字符串跟列表做了比较,然后发现字符串竟然没有复制的方法。当时没有细想,只说要搁置疑问。过后,有好学的小伙伴
    发表于 11-25 10:32 3066次阅读

    平化字符串处理方法简介

    这里介绍一组有用的字符串处理方法,即平化至字符串和从字符串还原。
    的头像 发表于 09-26 10:20 2335次阅读

    python字符串有哪些特定方法

    python字符串序列操作也适用于列表和元组。 python字符串还有独有方法,即字符串对象的函数,其他对象不可调用,只有字符串对象可
    的头像 发表于 02-23 15:02 770次阅读

    字符串的相关知识

    TCL 中的数据类型只有一种:字符串。这些字符串可以是字母、数字、布尔值、标点符号等特殊字符的组合。在某些特殊命令的作用下,字符串可以向其他数据类型转换。下面将系统的讲解或回顾下
    的头像 发表于 03-29 11:41 1198次阅读

    Python中检查字符串包含的方法

    Python 有多种处理字符串方法。今天我们介绍如何检查一个字符串中是否包含另一个字符串
    的头像 发表于 05-14 16:02 1.6w次阅读

    oracle字符串split成多个

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

    labview字符串如何转换为16进制字符串

    在LabVIEW中,将字符串转换为16进制字符串是一个常见的需求,尤其是在处理数据通信和硬件接口时。LabVIEW提供了多种方法来实现这一转换,包括使用内置函数、编写VI(Virtual
    的头像 发表于 09-04 15:54 3148次阅读

    字符串处理方法 字符串转数字的实现

    在编程中,将字符串转换为数字是一个常见的需求。不同的编程语言有不同的方法来实现这一功能。以下是一些常见编程语言中的字符串转数字的实现方法: Python 在Python中,可以使用内置
    的头像 发表于 01-07 15:26 225次阅读

    字符串反转的实现方式

    在编程中,字符串反转是一个基础而重要的操作,它涉及到将一个字符串中的字符顺序颠倒过来。这个操作在多种编程语言中都有不同的实现方式,本文将探讨几种常见的字符串反转
    的头像 发表于 01-07 15:27 234次阅读