ZetCode

Java StringJoiner

最后修改于 2025 年 5 月 31 日

本文探讨 Java 中的 StringJoiner,这是一个用于高效构建分隔字符串的有用类。

StringJoiner 通过在元素之间插入分隔符来帮助格式化字符序列。 此外,它还允许使用可选的前缀和后缀进行自定义,使其成为结构化文本格式化的理想选择。

关于 StringJoiner 的一个重要细节是,它仅在元素之间插入分隔符,而不在序列末尾插入。 这意味着最后一个元素不会有多余的尾随分隔符,从而确保干净和正确的格式,而无需不必要的字符。

在内部,StringJoinerString.join 方法利用,提供了一种简单有效的方式来连接字符串。

使用 StringJoiner

以下示例使用 StringJoiner 类连接数字。

Main.java
void main() {

    var joined = new StringJoiner(",");

    joined.add("1");
    joined.add("2");
    joined.add("3");
    joined.add("4");
    joined.add("5");

    System.out.println(joined);
}

该示例连接五个数字并将最终字符串打印到控制台。

var joined = new StringJoiner(",");

创建 StringJoiner 类的新实例。 逗号字符用作分隔符。

joined.add("1");
joined.add("2");
joined.add("3");
joined.add("4");
joined.add("5");

使用 add 方法添加五个值。

System.out.println(join);

StringJoiner 被转换为字符串并打印到控制台。

$ java Main.java
1,2,3,4,5

String.join 方法

在第二个示例中,我们使用 String.join 方法连接字符串。

Main.java
void main() {

    var joined = String.join("/", "2024", "7", "1");
    System.out.println(joined);
}

String.join 方法在内部使用 StringJoiner

var joined = String.join("/", "2024", "7", "1");

使用 String.join 方法连接日期。

$ java Main.java
2016/8/5

连接列表

第三个示例连接列表的元素。

Main.java
void main() {

    var words = List.of("Today", "is", "a", "beautiful", "day");
    var joined = String.join(" ", words);

    System.out.println(joined);
}

可以将列表作为参数传递给 String.join 方法。

var joined = String.join(" ", words);

列表的元素用单个空格字符连接。

$ java Main.java
Today is a beautiful day

读取 CSV 文件

以下示例从 CSV 文件中读取数字,然后使用 StringJoiner 连接它们。

data.csv
13,24,35,16,50

这是 numbers.csv 文件。

Main.java
void main() throws FileNotFoundException {

    var fileName = "data.csv";

    StringJoiner joined;

    try (var scanner = new Scanner(new File(fileName))) {
        scanner.useDelimiter(",");

        joined = new StringJoiner("|");

        while (scanner.hasNext()) {

            joined.add(scanner.next());
        }
    }

    System.out.println(joined);
}

该示例读取包含数字的 CSV 文件,并使用不同的分隔符通过 StringJoiner 连接它们。

try (var scanner = new Scanner(new File(fileName))) {
    scanner.useDelimiter(",");

这些值通过 Scanner 类读取。 数字由逗号字符分隔,因此我们使用 useDelimiter 方法设置逗号分隔符。

var joined = new StringJoiner("|");

使用 "|" 分隔符实例化 StringJoiner 类。

while (scanner.hasNext()) {

    join.add(scanner.next());
}

我们使用扫描仪检索值,并将它们与连接器连接起来。

写入 CSV 文件

下一个示例将数字写入 CSV 文件。

Main.java
void main() throws IOException {

    var fileName = "data.csv";
    var joined = new StringJoiner(",");

    joined.add("21");
    joined.add("43");
    joined.add("54");
    joined.add("76");
    joined.add("98");

    var newFile = new File(fileName);
    boolean created = newFile.createNewFile();

    if (created) {
        try (var pw = new PrintWriter(newFile)) {

            pw.write(joined.toString());
        }
    }
}

该示例使用 StringJoiner 连接五个数字,并将连接的字符串写入 CSV 文件。

var joined = new StringJoiner(",");

joined.add("21");
joined.add("43");
joined.add("54");
joined.add("76");
joined.add("98");

使用 StringJoiner 连接五个数字。 数字用逗号字符分隔。

var newFile = new File(fileName);
boolean created = newFile.createNewFile();

在当前工作目录中创建一个新的文件对象。

if (created) {
    try (var pw = new PrintWriter(newFile)) {

        pw.write(joined.toString());
    }
}

连接的值被写入文件。

Collectors.joining 方法

Collectors.joining 方法返回一个 Collector,该 Collector 连接输入元素,并按遇到的顺序使用指定的分隔符分隔它们。

Main.java
void main() {

    Stream<String> stream = Stream.of("Jan", "Peter", "Robert");

    String names = stream.collect(Collectors.joining(" "));
    System.out.println(names);
}

该示例使用 stream API 连接三个名称。

$ java Main.java
Jan Peter Robert

来源

Java StringJoiner - 语言参考

在本文中,我们介绍了 StringJoinerCollectors.joining

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直撰写编程文章。 迄今为止,我撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有Java教程