Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 程序查找输入字符串中存在的整数之和_Java_Algorithm - Fatal编程技术网

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

Java 程序查找输入字符串中存在的整数之和,java,algorithm,Java,Algorithm,输入=“12文本1 abc12 c12lj 7 3” 输出=12+1+7+3=23 注意:在输入字符串中,整数由一个或多个空格分隔。不要考虑字母数字子串。 我遇到过这个问题。但是我不希望我的代码抛出NumberFormatException 到目前为止,我已经尝试了下面的代码,它在所有情况下都能正常工作,并且没有抛出任何NumberFormatException public class SumOfIntegersFromString { private static final String

输入=“12文本1 abc12 c12lj 7 3”

输出=12+1+7+3=23

注意:在输入字符串中,整数由一个或多个空格分隔。不要考虑字母数字子串。

我遇到过这个问题。但是我不希望我的代码抛出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));
}}
公共类SumOfIntegersFromString{
私有静态最终字符串编号=“0123456789”;
/**它匹配一个或多个空格**/
私有静态最终字符串REG_EXPR_MATCH_ONE_或_MORE_SPACES=“\\s+”;
//逻辑1
私有静态int-sumOfIntegersFromString(最终字符串输入){
整数计数=0;
String splits[]=input.split(REG_EXPR_MATCH_一个或多个空间);
用于(字符串s:拆分){
如果(isNumber(s.trim())){
整数编号=新整数;
计数=计数+否;
}
}
返回计数;
}
私有静态布尔值isNumber(字符串str){
boolean isNumber=boolean.FALSE;
整数计数=0;
对于(int i=0;i

欢迎对上述代码中的任何优化或新逻辑进行更优化

您可以通过正则表达式匹配简化您的
isNumber
方法:

private static final String REG_EXP_NUMBER = "\\d+";

private static boolean isNumber(String str) {
    return str.matches(REG_EXP_NUMBER);
}

我更喜欢带有正则表达式的
模式
,以检测由单词边界包围的数字。然后,您可以解析找到的数字并将其添加到
列表中。假设您使用的是Java 8+,您可以将值映射到
String
并使用
收集器进行收集。加入(“+”
)以生成所需的输出(并通过映射到
int
来获得实际的总和)。像


如果您的输入是一个字符串,并且所有单词都由空格分隔,那么您可以创建一个scanner对象,该对象将标记空格之间的每个字符序列。然后,您可以将字符串解析为整数。如果它不是整数,
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);
 }   
}

你把问题看完了吗?我的意思是这里已经提到了一个类似的问题[这会引发问题吗?你的问题是什么?我写的代码中没有问题。我想要优化的解决方案为什么不使用正则表达式?@Dummy你能将逻辑粘贴在这里吗?请在发布答案之前从头到尾阅读问题
12 + 1 + 7 + 3 = 23
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);
 }   
}