如何在功能上将字符串中的数字相加,直到特定的索引。

问题描述 投票:0回答:2

我想从例如 "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

我将感激的建议,如何解决这两个以上的解决方案,并收到功能的方法,将从字符串的数字相加,直到特定的索引。

java functional-programming java-stream java-11
2个回答
6
投票

你可以这样做。

number.chars()
      .limit(2)
      .map(Character::getNumericValue)
      .sum();

或者...

number.substring(0, 2)
            .chars()
            .map(Character::getNumericValue)
            .sum();

2
投票

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" 按照要求。

© www.soinside.com 2019 - 2024. All rights reserved.