为什么没有从此Java流中过滤出空字符串?

workerjoe:

我有一个流操作(Java 8),用于将一堆字符串解析为双精度并求和。一些字符串是空的,但我不相信任何一个都为空。我添加了一个filter操作,可以在空的对象到达Double.parseDouble()可能导致错误的位置之前对其进行过滤,但是该过滤器似乎无法正常工作。

我的代码:

double myTotal= myObjectList.stream()
    .map(myObject::getAmount)
    .peek( s -> System.out.println("before filter: " + s) )
    .filter( s -> !s.isEmpty() )
    .peek( s -> System.out.println("after filter: " + s) )
    .mapToDouble(Double::parseDouble)
    .reduce(0D,Double::sum);

这是在JSP中,并且JSP无法编译。根据错误页面,异常发生在最后一行(.reduce(0D,Double::sum);),但“根本原因”是“ java.lang.NumberFormatException: empty String”- Double.parseDouble()遇到空字符串。

我尝试了几种filter操作排列,包括一些检查为null的检查和一些!s.equals("")类似的检查我添加了peek调试操作,很明显之前之后都打印了一个空字符串filter

我究竟做错了什么?是否有更好的方法来过滤无法解析为双精度的值?

SDJ:

带有空格的字符串,技术上不为空,会导致消息“空字符串”引发异常。正如另一个提示指出的那样,解决方案是首先修剪输入字符串。

这种混淆是由不幸的文档错误导致的,该错误sun.misc.FloatingDecimal.readJavaFormatString由间接调用Double.parseDouble虽然的语义String#empty

true当且仅当length()为0时返回

执行readJavaFormatString实际修剪输入字符串第一个,然后计算长度,并抛出NumberFormatException与(非常误导)消息“空字符串”:

in = in.trim(); // don't fool around with white space.
                // throws NullPointerException if null 
int len = in.length();
if ( len == 0 ) {
    throw new NumberFormatException("empty String");
}

通过执行以下操作可以很容易地观察到这一点:

Double.parseDouble("   ");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么String.strip()比String.trim()快5倍为空字符串在Java中11

Java的8 - 从列表过滤空字符串不工作

为什么在Java 8中split有时会在结果数组的开头删除空字符串?

连接Java中的空字符串

为什么JVM在字符串池内存中没有“看到”重复的字符串值?

为什么contains()方法在Java中的非空字符串中找到空字符串

在Java中检查空字符串

字符串中的Java空字符

为什么在JavaScript中不空字符串== null

为什么IntelliJ不断从此JavaScript模板字符串中删除反引号?

为什么我不能从此链接获取XML文档,为什么在字符串中我可以使所有标签括号都变成引号呢?

从字符串数组中过滤出空字符串

从字符串数组中过滤出对象数组

使用单行从字符串python中过滤出数字

为什么使用以下函数从字符串流中过滤出ASCII值32('')也会过滤出'\ n'和'\ t'?

断言var是phpunit中没有特定字符的非空字符串

Java中与字符串相关的问题:为什么我的级别提升/降级没有正确更新?

在Java中检查空字符串

在Java中,我有一个名为字符串“ A”的字符串(大小为1)。为什么string.substring(1)没有给出异常

为什么re.sub没有用空字符串替换字符串

为什么mcrypt加密在最终字符串中包含很多空字符?

为什么我的函数没有从数组中删除所有字符串?javascript

为什么Laravel View :: make返回没有错误的空字符串?

为什么 s[0] 是 C++ 中空字符串 s 的空字符串?

过滤掉 hivecontext.sql 中的空字符串和空字符串

如何从字符串中过滤出特定的字符串

从字符串中过滤出 UUId 编号

为什么在尝试在 Java 中拆分字符串时出现空字符串?以及如何修复它?

有没有办法使用 Java 流从字符串的 ArrayList 中过滤符合条件的子字符串?