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
相关产品推荐
相关产品推荐

