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

Java 8:使用Stream API去除字符串空格与重复字符失效问题

解决Java 8 Stream API去除字符串重复字符与空格的问题

你的代码没法正常运行,核心问题出在这一步:Stream.of(sentence.toCharArray())并不会把字符串拆分成单个字符的流——它实际上创建了一个只包含单个char数组对象的流,后续的flatMap操作自然没法正确处理每个字符,导致整个逻辑走偏了。

下面是一个可行的实现方案,利用Java 8 Stream API正确完成去除空格、去重字符并排序的需求:

直接打印结果的版本

String sentence = "Hello World! This is a test string with duplicates";

sentence.chars()
        // 过滤掉所有空格字符
        .filter(c -> c != ' ')
        // 去除重复的字符(基于Unicode编码值)
        .distinct()
        // 按字符的自然顺序排序
        .sorted()
        // 将Unicode编码值转回char并打印
        .forEach(c -> System.out.print((char) c));

收集为新字符串的版本

如果需要把处理后的结果保存为一个新字符串而不是直接打印,可以用collect操作:

String sentence = "Hello World! This is a test string with duplicates";

String processedString = sentence.chars()
                                .filter(c -> c != ' ')
                                .distinct()
                                .sorted()
                                .collect(StringBuilder::new,
                                         StringBuilder::appendCodePoint,
                                         StringBuilder::append)
                                .toString();

System.out.println(processedString);

关键步骤解释

  • sentence.chars():将字符串转换为IntStream,每个元素对应字符的Unicode编码值(Java中char本质是无符号16位整数,用IntStream处理更方便)
  • filter(c -> c != ' '):直接过滤掉空格的Unicode编码值,彻底移除所有空格
  • distinct():自动去重重复的字符编码,确保每个字符只保留一次
  • sorted():按字符的Unicode值排序,对应字符的自然顺序(比如字母按A-Z排列)
  • collect(...):通过StringBuilder收集处理后的编码值,最终转换为字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:56:09