Я хочу суммировать цифры, например, от. String
как "153" до индекса 2 и получения результата 6
из-за 1 + 5 = 6. Как обычно, я бы использовал решение classi c l oop, например, с проверкой, является ли текущий индекс ниже 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;
}
Вышеописанный подход работает как следует, но я хочу переписать это логи c до 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
Буду благодарен за предложение о том, как исправить эти два вышеупомянутых решения и получить функциональный подход, который будет суммировать цифры от String до определенного индекса.