You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用System.out::print打印字符串数组时如何追加分隔符且无尾空格

实现方案

最简实现(满足空格分隔输出)

直接使用JDK提供的Collectors.joining处理字符串拼接即可,代码可简化为符合stream、方法引用使用习惯的写法:

import java.util.*;
import java.util.stream.Collectors;

public class SortPrintTest {
    public static void main(String[] args) {
        ArrayList<String> enemies = new ArrayList<>(Arrays.asList("Malfoy", "Crabbe", "Goyle", null));
        String result = enemies.stream()
                // 处理null转为字符串"null",保留输出标识
                .map(obj -> Objects.toString(obj, "null"))
                // 排序规则:null放在最前,其余元素按字符串长度升序
                .sorted(Comparator.nullsFirst(Comparator.comparingInt(String::length)))
                // 用空格作为分隔符拼接,自动避免末尾多余空格
                .collect(Collectors.joining(" "));
        System.out.println(result);
    }
}

运行后输出结果完全符合要求:null Goyle Malfoy Crabbe

通用带附加信息版本

如果需要给每个打印元素附加指定信息,仅需修改map环节的逻辑即可,示例(给每个元素加[敌方]前缀):

String result = enemies.stream()
        .map(obj -> {
            String content = Objects.toString(obj, "null");
            // 此处可自定义附加逻辑,比如加前缀、后缀、格式包裹等
            return "[敌方]" + content;
        })
        .sorted(Comparator.nullsFirst(Comparator.comparingInt(String::length)))
        .collect(Collectors.joining(" "));

输出结果为:[敌方]null [敌方]Goyle [敌方]Malfoy [敌方]Crabbe

原代码问题说明

原有代码直接调用forEach(System.out::print)会逐个打印元素且没有插入任何分隔符,所以输出内容会连在一起。Collectors.joining是JDK原生的字符串拼接工具,不需要手动判断最后一个元素要不要加分隔符,性能和可读性都优于手动拼接的实现。

内容的提问来源于stack exchange,提问作者likejudo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:09:03