编程以查找输入字符串中存在的整数之和

时间:2017-05-14 02:38:08

标签: java algorithm

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));
}}

欢迎使用上述代码中的任何优化或更优化的新逻辑

3 个答案:

答案 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);
 }   
}
相关问题