【问题标题】:String concatenate null value and retrieve null value java字符串连接空值并检索空值java
【发布时间】:2019-01-17 19:52:02
【问题描述】:

我正在使用 Stream.of 将几个字符串值与分隔符“:”连接起来,其中一个可以为空,但是当我将它检索到字符串数组时,我希望有一个固定数量的该数组中的元素。我想知道字符串数组中的哪一个为空。 例如,我使用

连接了一个字符串
Stream.of("abc", "def", "ghi", null)
            .collect(Collectors.joining(":"));

它将是“abc:def:ghi:null”。然后将其拆分为字符串数组,我使用

final String[] strings = "abc:def:ghi:null".split(":");

但是字符串[3] 是“null”而不是 null。有没有办法将“null”转换为 null 值?

【问题讨论】:

  • 如果一个值是合法的"null" 会发生什么?比如有人叫Null

标签: java arrays regex java-8 stream


【解决方案1】:

您应该将null 映射作为后处理处理:

String[] strings =  "abc:def:ghi:null".split(":");
strings = Arrays.stream(strings).map(s-> s.equals("null")? null : s).toArray(String[]::new);
System.out.println(strings[3] == null);

打印true

请注意,这里您不知道在流中的原点是否使用了 null"null" 字符串,因为一旦加入 String 就无法区分它们。

【讨论】:

    【解决方案2】:

    字符串"null" 不是null。您需要过滤结果:

    final String[] strings = Arrays.stream("abc:def:ghi:null".split(":")).filter(str -> str.equals("null")).toArray(String::new);
    

    编辑:

    对不起,我没有正确阅读。如果您想将"null" 映射到null,那么只需:

    final String[] strings = Arrays.stream("abc:def:ghi:null".split(":")).map(str -> str == "null" ? null : str).toArray(String[]::new);
    

    【讨论】:

    • 如果我使用字符串[3],这最终会出现 IndexOutOfBounds,我想知道最后一个元素的值,null 或 non-null
    • 对,我已经更正了答案,我需要睡个好觉,我阅读有问题:)
    • 您确定可以在 Java 中使用 str == "null" 吗?它们可能不是同一个对象,即使它们是相同的值。
    • 好吧,也许equals会更一致,但据我所知,Strings 是被interned,所以操作符==equals方法的效果是一样的。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2021-01-29
    • 2013-09-07
    • 1970-01-01
    相关资源
    最近更新 更多