【发布时间】:2020-08-17 21:46:29
【问题描述】:
我想对例如的数字求和。 String 喜欢 "153" 直到索引 2 并收到结果 6 因为 1+5=6。
通常,我会使用经典的循环解决方案,例如检查当前索引是否低于 2:
static int sum(String s){
int sum = 0;
for(int i = 0; i < s.length() ; i++){
if( Character.isDigit(s.charAt(i)) ){
sum = sum + Character.getNumericValue(s.charAt(i));
}
}
return sum;
}
上述方法可以正常工作,但我想将此逻辑重写为 Java stream 方法。
我有一个类似的实现:
public static int sumDigitsTillIndex(String number) {
return IntStream.range(0, number.length())
.filter(i -> i < 2)
.map(number::charAt)
.sum();
}
对于这个参数 153,我收到了 102,这对我来说是一个惊喜。
我找到了另一个类似的解决方案,例如:
return String
.valueOf(number)
.chars()
.map(Character::getNumericValue)
.sum();
这是正确地对数字求和,但有额外的filter 方法,例如:
.filter(index -> number.charAt(index) < 2)
我正在接收
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 49
我将不胜感激有关如何修复上述两个解决方案的建议,并接收功能性方法,该方法将总结从字符串到特定索引的数字。
【问题讨论】:
标签: java functional-programming java-stream java-11