Java核心类——StringJoiner

我们在需要进行字符串拼接的时候,可以使用StringBuilder进行拼接:

复制代码
public class catchExample2 {
    public static void main(String[] args) {
        String[] names = {"bao","ke","mao"};
        StringBuilder s = new StringBuilder();
        s.append("Hello ");
        for (String name:names) {
            s.append(name).append(", ");
            s.delete(s.length() -2, s.length());
            s.append("!");
        }
        System.out.println(s);
    }
}
//执行结果:
Hello bao! ke! mao!
复制代码

Java还提供了另一个类,StringJoiner用于字符串拼接:

复制代码
public class catchExample2 {
    public static void main(String[] args) {
        String[] names = {"bao","ke","mao"};
        StringJoiner s = new StringJoiner(", ", "Hello","!");  //分隔符,开始符,结束符
        for (String name : names) {
            s.add(name);
        }
        System.out.println(s);
    }
}
复制代码

我们首先可以看下StringJoiner的构造函数:

复制代码
public StringJoiner(
                    CharSequence delimiter,
                    CharSequence prefix,
                    CharSequence suffix) {
    //参数检测
    Objects.requireNonNull(prefix, "The prefix must not be null");
    Objects.requireNonNull(delimiter, "The delimiter must not be null");
    Objects.requireNonNull(suffix, "The suffix must not be null");
    // make defensive copies of arguments
    this.prefix = prefix.toString();
    this.delimiter = delimiter.toString();
    this.suffix = suffix.toString();
    this.emptyValue = this.prefix + this.suffix;
}
复制代码

关于每个参数的解释:
  delimiter:每个字符之间使用的字符序列
  prefix:开头要使用的字符序列
  suffix:最后使用的字符序列

其实StringJoiner内部也是调用StringBuilder来进行构建的:

复制代码
public StringJoiner add(CharSequence newElement) {
    prepareBuilder().append(newElement);
    return this;
}

private StringBuilder prepareBuilder() {
    if (value != null) {
        value.append(delimiter);
    } else {
        value = new StringBuilder().append(prefix);
    }
    return value;
}
复制代码

String还提供了一个静态方法join(),这个方法在内部使用了StringJoiner来拼接字符串,
在不需要指定开头和结尾的时候,String.join()更方便。

String[] names = {"mao", “xian”,"ke"}
var s = String.join(", ", names)

 

posted @   明王不动心  阅读(281)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示