题目描述
- 字符串 s,只包含 a-z,A-Z,±;
- 合法的整数包括
1)正整数 一个或者多个0-9组成,如 0 2 3 002 102
2)负整数 负号 - 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023
输入
包含数字的字符串
输出
所有整数的最小和
示例
输入:
bb1234aa
输出:
10
Java代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class getMinSum {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
char[] chars = s.toCharArray();
int res = 0;
for (int i = 0; i < chars.length; i++) {
if (chars[i] > '0' && chars[i] <= '9') {
res += chars[i] - '0';
} else if (chars[i] == '-') {
StringBuilder builder = new StringBuilder();
builder.append('-');
while (i + 1 < chars.length && chars[i + 1] >='0' && chars[i + 1] <= '9') {
builder.append(chars[i + 1]);
i++;
}
// 处理 - 号后跟字母或其他字符的情况
if (!builder.toString().equals("-")) {
res += Integer.parseInt(builder.toString());
}
}
}
System.out.println(res);
}
}
问题总结
1.处理异常 For input string: "-"
该问题唯一困扰我的点是在于通过某项用例时总是报错 For input string: "-"
,这是因为在用例中存在 -
号后是其他字符的缘故,导致 builder
中只有负号而不能成功地转换为整数。因此,我通过 if (!builder.toString().equals("-"))
来规避这一情况。
2.走的弯路
在开始解题的时候,我曾尝试通过正则表达式 regex = [^0-9 -]
来去除其他字符,再通过 regex = -+
来去除连续的负号。但是这种方法并不奏效。准确来讲,在原题目中的意思是:负数可以通过负号来识别,而正数则要通过其他字符的隔离才能识别,如果将其他字符都除去,那对于负数和正数的判断就会出错,例如:对于 1+abced-521abc5
正确的识别应该为:1-521+5
,但是上述方法却会识别为:1-5215
,因此不适用。
测试
题目编号 | 结果 | 内存 | 时间 | 语言 | 代码长度 |
---|---|---|---|---|---|
3107 | 正确 | 36536 KiB | 862 ms | Java/Edit | 1561 bytes |
侵权必删声明
本资料部分内容来源于互联网及公开渠道,仅供学习和交流使用,版权归原作者所有。若涉及版权问题,敬请原作者联系我,我将立即处理或删除相关内容。感谢您的理解与支持。