题目描述
输入字符串s,输出s中包含所有整数的最小和。
说明:
字符串s,只包含 a-zA-Z±;
合法的整数包括
1)正整数 一个或者多个0-9组成,如 0 2 3 002 102
2)负整数 负号-开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023
输入描述
包含数字的字符串
输出描述
所有整数的最小和
用例
输入 | bb1234aa |
输出 | 10 |
输入 | bb12-34aa |
输出 | -31 |
说明 | 1+2+(-34)=-31 |
解题思路
提取合法整数:
- 使用正则表达式来提取字符串中的所有整数,包括正整数和负整数。
- 正整数的形式:由一个或多个数字组成,可能带有前导零(例如 012)。
- 负整数的形式:以 - 开头,后面跟着一个或多个数字,也可能带有前导零(例如 -00023)。
计算最小和:
- 提取到整数后,转换为整数类型,并计算它们的和。
代码实现
import java.util.*;
import java.util.regex.*;
public class MinimumSumOfIntegers {
public static int getMinimumSum(String s) {
// 正则表达式:匹配负整数或者正整数
Pattern pattern = Pattern.compile("-?\\d+");
Matcher matcher = pattern.matcher(s);
int sum = 0;
// 遍历所有匹配的整数
while (matcher.find()) {
// 将匹配到的字符串转换为整数
int num = Integer.parseInt(matcher.group());
sum += num; // 累加到总和
}
return sum;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取输入的字符串
String s = scanner.nextLine().trim();
// 获取所有整数的最小和
int result = getMinimumSum(s);
// 输出结果
System.out.println(result);
scanner.close();
}
}