为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2019-04-19 19:19:26
我试图将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 + " "));     }}
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

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.

        .map(s -> s.replaceAll("[0-9]", ""))//Removes all digits

        .map(s -> s.replace(" ", ""))//Removes all whitespace

        .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"));


查看完整回答
反对 回复 2019-05-15
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

如果你真的想要使用流来实现它,你需要在较低级别上应用过滤逻辑 - 而不是在字符串流上,在单个字符串中的字符流上应用:

System.out.println(
    "abcd 123 efgh".chars()
        .map(Character::toUpperCase)
        .filter(c -> !Character.isDigit(c))
        .filter(c -> !Character.isSpaceChar(c))
        .mapToObj(c -> String.valueOf((char) c))
        .collect(Collectors.joining()));

ABCDEFGH

(这mapToObj部分是为了避免必须处理本来需要的自定义收集器,因为流是一个IntStream而不是一个常规的Object流。)

如果需要,您可以将其包装到一个处理多个字符串的流中 - 然后上面的逻辑将map在该流的操作中。


查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 690 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信