【发布时间】:2021-03-10 20:34:33
【问题描述】:
我目前正在尝试使用 codebat 为大学学习 Java。我的目标是获取任何 ASCII 字符的字符串,从字符串中拆分所有数字,然后将所有数字的总和作为 int 返回。
例如:foo("abc123xyz") 应返回 123,foo("12cd43ad") 应返回 55
这是我的代码:
public int sumNumbers(String str) {
int sum = 0;
String[] numArr = str.split("\\D+"); //This is my attempted regex
for (String num: numArr) {
sum += Integer.parseInt(num);
}
return sum;
}
当我运行 sumNumbers("abc123xyz") 或 sumNumbers("aa11b33") 时,我收到此错误:
NumberFormatException: For input string: ""
为什么我的 numArr 中有一个空字符串,解决此问题的正确正则表达式是什么?
【问题讨论】:
-
因为你用非数字作为分隔符进行拆分,而这个分隔符出现在字符串的开头。文档中也描述了此行为。简单修复:包装在
if语句中:if (!num.isEmpty()) { ... }。