iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实用工具之StringJoiner详解
  • 649
分享到

Java实用工具之StringJoiner详解

2024-04-02 19:04:59 649人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

背景 在平时的业务开发中,我们可能会遇到字符串列表根据分隔符进行拼接的需求。比如: 输入: 数组:[“a”,“b”,“c”]分隔符:"," 输出: “a,b,c” 处理 通常我们

背景

在平时的业务开发中,我们可能会遇到字符串列表根据分隔符进行拼接的需求。比如:

输入:

数组:[“a”,“b”,“c”]分隔符:","

输出:

“a,b,c”

处理

通常我们可以使用StringBuilder根据下标位置决定是否需要添加分隔符以达到目的,比如:


public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        String[] strings = new String[]{"a", "b", "c"};
        String delimiter = ",";
        for (int i = 0; i < strings.length; i++) {
            if (i != 0) {
                sb.append(delimiter);
            }
            sb.append(strings[i]);
        }
        System.out.println(sb.toString());
    }

或者:


public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        String[] strings = new String[]{"a", "b", "c"};
        String delimiter = ",";
        int tmp = strings.length - 1;
        for (int i = 0; i < strings.length; i++) {
            sb.append(strings[i]);
            if (i != tmp) {
                sb.append(delimiter);
            }
        }
        System.out.println(sb.toString());
    }

但是每次遇到这种情况都去这样拼接很麻烦,而且如果使用迭代器,没有下标就不能使用这种方法。那么就每次append分隔符,最后再截断:


public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        String[] strings = new String[]{"a", "b", "c"};
        String delimiter = ",";
        for (String str:strings) {
            sb.append(str).append(delimiter);
        }
        System.out.println(sb.substring(0,sb.length()-1));
    }

所以通常情况下,我们都会去扩展一个StringBuilder以提供分隔符组装的功能,博主平时是这样弄的:


public class MyStringBuilder {
    private StringBuilder stringBuilder;
    private String delimiter;

    public MyStringBuilder(String delimiter) {
        this.delimiter = delimiter;
    }

    public MyStringBuilder append(String item) {
        getStringBuilder().append(item);
        return this;
    }

    
    private StringBuilder getStringBuilder() {
        if (stringBuilder == null) {
            //相当于index==0,
            stringBuilder = new StringBuilder();
        } else {
            stringBuilder.append(delimiter);
        }
        return stringBuilder;
    }

    @Override
    public String toString() {
        return stringBuilder == null ? "" : stringBuilder.toString();
    }
}

在初始化的时候指定分隔符,然后每次直接append就行了,由内部决定在何时添加分隔符。
jdk1.8之后,提供了一个StringJoiner类,提供了类似的功能,可以在初始化的时候指定分隔符和前缀后缀:


StringJoiner sj = new StringJoiner(",","(",")");
sj.add("a").add("b").add("c");
System.out.println(sj.toString());
//输出:(a,b,c)

博主大致看了一下StringJoiner的实现逻辑,很简单,和咱们扩展StringBuilder基本是一样的逻辑,另外加入了前缀后缀,然后多了一个merge的功能:


public StringJoiner merge(StringJoiner other) {
        Objects.requireNonNull(other);
        if (other.value != null) {
            final int length = other.value.length();
            // lock the length so that we can seize the data to be appended
            // before initiate copying to avoid interference, especially when
            // merge 'this'
            StringBuilder builder = prepareBuilder();
            builder.append(other.value, other.prefix.length(), length);
        }
        return this;
    }

到此这篇关于Java实用工具之StringJoiner详解的文章就介绍到这了,更多相关Java StringJoiner内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java实用工具之StringJoiner详解

本文链接: https://www.lsjlt.com/news/125656.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作