如何从流中删除数字和空格?

我试图将args转换为流。然后必须将流设为大写,从字符串中删除数字和空格(而不是整个字符串)。创建流和大写工作成功,现在我坚持使用过滤器方法,我不知道为什么我的代码不工作,已经做了一些研究。

package A_11;import java.util.Arrays;import java.util.stream.Stream;public class A_11_g {
    public static void main(String[] args){
        Stream<String> stream = Arrays.stream(args);
        stream.map(s -> s.toUpperCase()).filter(s -> Character.isDigit(s)).filter(e -> !e.isEmpty())
                .forEach(name -> System.out.print(name + " "));
    }}


倚天杖
浏览 691回答 2
2回答

qq_笑_17

filter()生成一个新流,其中包含满足谓词(您提供的条件)的原始元素。你想要的是map()函数,它在将给定函数应用于原始流的每个元素之后产生一个新流。下面应该可以做到这一点,底部的一些断言可以选择用于在单元测试中进行验证。Stream<String> stringStream = Stream.of("unfiltered", "withDigit123", " white space ");List<String> filtered = stringStream.map(s -> s.toUpperCase())//Can be replaced with .map(String::toUpperCase) if you want, but did it this way to make it easier to understand for someone new to all this.&nbsp; &nbsp; &nbsp; &nbsp; .map(s -> s.replaceAll("[0-9]", ""))//Removes all digits&nbsp; &nbsp; &nbsp; &nbsp; .map(s -> s.replace(" ", ""))//Removes all whitespace&nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());//Returns the stream as a list you can use later, technically not what you asked for so you can change or remove this depending on what you want the output to be returned as.//Assertions, optional.assertTrue(filtered.contains("UNFILTERED"));assertTrue(filtered.contains("WITHDIGIT"));assertTrue(filtered.contains("WHITESPACE"));

小怪兽爱吃肉

如果你真的想要使用流来实现它,你需要在较低级别上应用过滤逻辑 - 而不是在字符串流上,在单个字符串中的字符流上应用:System.out.println( &nbsp;&nbsp;&nbsp;&nbsp;"abcd&nbsp;123&nbsp;efgh".chars() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(Character::toUpperCase) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(c&nbsp;->&nbsp;!Character.isDigit(c)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(c&nbsp;->&nbsp;!Character.isSpaceChar(c)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.mapToObj(c&nbsp;->&nbsp;String.valueOf((char)&nbsp;c)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.joining()));ABCDEFGH(这mapToObj部分是为了避免必须处理本来需要的自定义收集器,因为流是一个IntStream而不是一个常规的Object流。)如果需要,您可以将其包装到一个处理多个字符串的流中 - 然后上面的逻辑将map在该流的操作中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java