input =“12 text 1 abc12 c12lj 7 3”;
输出= 12 + 1 + 7 + 3 = 23
注意:在输入字符串中,整数由一个或多个空格分隔。不要考虑字母数字子字符串。
我遇到了这个solution。但我不希望我的代码抛出NumberFormatException。
到目前为止,我已经尝试了以下代码,并且正常工作正常,并且没有抛出任何NumberFormatException
public class SumOfIntegersFromString {
private static final String NUMBER = "0123456789";
/** It matches one or many white spaces. **/
private static final String REG_EXPR_MATCH_ONE_OR_MORE_SPACES = "\\s+";
// Logic 1
private static int sumOfIntegersFromString(final String input) {
int count = 0;
String splits[] = input.split(REG_EXPR_MATCH_ONE_OR_MORE_SPACES);
for (String s : splits) {
if (isNumber(s.trim())) {
Integer no = new Integer(s);
count = count + no;
}
}
return count;
}
private static boolean isNumber(String str) {
boolean isNumber = Boolean.FALSE;
int count = 0;
for (int i = 0; i < str.length(); i++) {
String s = Character.toString(str.charAt(i));
if (NUMBER.contains(s)) {
count = count + 1;
}
}
if (count == str.length()) {
isNumber = Boolean.TRUE;
}
return isNumber;
}
public static void main(String[] args) {
String text = "12 Test 3 7 text123 1 2 ";
System.out.println(sumOfIntegersFromString(text));
}}
欢迎使用上述代码中的任何优化或更优化的新逻辑
答案 0 :(得分:0)
您可以通过正则表达式匹配简化isNumber
方法:
private static final String REG_EXP_NUMBER = "\\d+";
private static boolean isNumber(String str) {
return str.matches(REG_EXP_NUMBER);
}
答案 1 :(得分:0)
我希望Pattern
带有正则表达式来检测由字边界包围的数字。然后,您可以解析找到的数字并将其添加到List<Integer>
。假设您正在使用Java 8+,您可以将值映射到String
并使用Collectors.joining(" + ")
收集以生成所需的输出(并通过映射到int
获取实际总和) 。像,
String text = "12 text 1 abc12 c12lj 7 3 ";
List<Integer> al = new ArrayList<>();
Pattern p = Pattern.compile("\\b(\\d+)\\b");
Matcher m = p.matcher(text);
while (m.find()) {
al.add(Integer.parseInt(m.group()));
}
System.out.print(al.stream().map(x -> Integer.toString(x)) //
.collect(Collectors.joining(" + ")));
System.out.print(" = ");
System.out.println(al.stream().mapToInt(Integer::intValue).sum());
输出(根据要求)
12 + 1 + 7 + 3 = 23
答案 2 :(得分:0)
如果您的输入是一个字符串,并且所有单词都由空格分隔,您可以创建一个扫描仪对象,该对象将标记每个空格之间的每个字符序列。然后你可以解析字符串的整数。如果它不是整数,则try/catch
子句将不执行任何操作。
import java.util.*;
public class AddNums {
public static void main(String[] args) {
String str = "hello 10 $xyz good 20 30 df";
Scanner sequence = new Scanner(str);
int sum = 0;
while (sequence.hasNext()){
String s = sequence.next();
try {
sum += Integer.parseInt(s);
}
catch (NumberFormatException e) {}
}
System.out.println(sum);
}
}