我想从例如 "153 "到索引2的数字相加,并得到结果。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
我将感激的建议,如何解决这两个以上的解决方案,并收到功能的方法,将从字符串的数字相加,直到特定的索引。
你可以这样做。
number.chars()
.limit(2)
.map(Character::getNumericValue)
.sum();
或者...
number.substring(0, 2)
.chars()
.map(Character::getNumericValue)
.sum();
String.charAt(int)
返回一个字符,然后将其装箱到一个 Character
. 另外,不采用 filter
你可以用 limit
. 喜欢。
return IntStream.range(0, number.length())
.limit(2)
.map(i -> Character.digit(number.charAt(i), 10))
.sum();
这使得 6
对于 "153"
按照要求。