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

