如何以功能方式将字符串中的数字相加到特定索引
How to sum digits in String till specific index in functional way
我想对例如中的数字求和。 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
我将不胜感激关于如何修复上述两个解决方案的建议,并获得将 String 中的数字汇总到特定索引的功能方法。
String.charAt(int)
returns 一个字符,然后将其框到 Character
。此外,您可以使用 limit
而不是 filter
。喜欢,
return IntStream.range(0, number.length())
.limit(2)
.map(i -> Character.digit(number.charAt(i), 10))
.sum();
根据要求为 "153"
提供 6
。
你可以这样做:
number.chars()
.limit(2)
.map(Character::getNumericValue)
.sum();
或
number.substring(0, 2)
.chars()
.map(Character::getNumericValue)
.sum();
我想对例如中的数字求和。 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
我将不胜感激关于如何修复上述两个解决方案的建议,并获得将 String 中的数字汇总到特定索引的功能方法。
String.charAt(int)
returns 一个字符,然后将其框到 Character
。此外,您可以使用 limit
而不是 filter
。喜欢,
return IntStream.range(0, number.length())
.limit(2)
.map(i -> Character.digit(number.charAt(i), 10))
.sum();
根据要求为 "153"
提供 6
。
你可以这样做:
number.chars()
.limit(2)
.map(Character::getNumericValue)
.sum();
或
number.substring(0, 2)
.chars()
.map(Character::getNumericValue)
.sum();