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