首页 > 解决方案 > 将数字总和计算为单行,输入有 3 位

问题描述

我必须计算单行中的字符串(通过扫描仪读取)的数字总和。另外,我必须确保仅在输入正好有 3 位时才计算输入。

到目前为止我得到了什么:

public class Test{
    public static void main(String... args) {
        System.out.print(new java.util.Scanner(System.in).nextLine().chars().mapToObj(i -> ((char)i)-'0').reduce(0, (a,b)->a+b));
    }
}

但是我怎样才能证明在那一行中正好有 3 位数字呢?

标签: javadigits

解决方案


将您的代码包装在一个Optional用于filter()检查长度并orElse()为错误长度输入提供输出的代码中:

System.out.print(Optional.of(new Scanner(System.in).nextLine())
    .filter(str -> str.matches("\\d{3}")).map(str -> str.chars().sum() - '0' * 3)
    .orElse("invalid input"));

请注意,您可以替换:

.mapToObj(i -> ((char)i)-'0').reduce(0, (a,b)->a+b)

和:

.map(i -> ((char)i)-'0').sum()

或者,因为您正好有 3 位数字,所以只需:

.sum() - '0' * 3

推荐阅读