Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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 - Fatal编程技术网

Java 在字符串中添加数字而忽略其字母

Java 在字符串中添加数字而忽略其字母,java,Java,伙计们。。我需要从用户那里获取字符串输入,只添加其数值,忽略字母。例如,如果用户输入75Number5,结果应为80或800dadsadasdwwfvv0002,结果应为802。但我总是得到0 import java.util.Scanner; public class NumberAddition { public static void main(String[] args) { Scanner kbd = new Scanner(System.in);

伙计们。。我需要从用户那里获取
字符串
输入,只添加其
数值
,忽略
字母
。例如,如果用户输入
75Number5
,结果应为
80
800dadsadasdwwfvv0002
,结果应为
802
。但我总是得到
0

import java.util.Scanner;

public class NumberAddition {

    public static void main(String[] args)
    {
        Scanner kbd = new Scanner(System.in);

        System.out.println("Enter any String: ");
        String myString = kbd.nextLine();
        myString = myString.toLowerCase();
        int result = 0;

        for(int i = 0; i < myString.length(); i++)
        {
            if(myString.charAt(i) != '1' || myString.charAt(i) != '2' ||
                    myString.charAt(i) != '3' || myString.charAt(i) != '4' ||
                    myString.charAt(i) != '5' || myString.charAt(i) != '6' ||
                    myString.charAt(i) != '7' || myString.charAt(i) != '8' ||
                    myString.charAt(i) != '9')
            result += 0;
            else 
                result += myString.charAt(i);
        }

        System.out.println("The result is " + result);
    }
}
import java.util.Scanner;
公共类编号条件{
公共静态void main(字符串[]args)
{
扫描仪kbd=新扫描仪(System.in);
System.out.println(“输入任何字符串:”);
字符串myString=kbd.nextLine();
myString=myString.toLowerCase();
int结果=0;
对于(int i=0;i
如果我理解你的问题,那么你可以使用a来构建一个只包含数字的
字符串。您可以使用来测试该条件。您还可以使用增强的函数来迭代支持
字符串的char数组,如

Scanner kbd = new Scanner(System.in);
System.out.println("Enter any String: ");
String myString = kbd.nextLine();
StringBuilder sb = new StringBuilder();
for (char ch : myString.toLowerCase().toCharArray()) {
    if (Character.isDigit(ch)) {
        sb.append(ch);
    }
}
int result = Integer.parseInt(sb.toString());
System.out.println("The result is " + result);
  • 将输出变量初始化为0
  • 在字符串的长度上循环
  • 使用String.charAt(int索引)获取字符串中的每个字符
  • 使用Character.isDigit(char ch)测试字符是否为数字
  • 如果字符不是数字,则忽略它并继续下一个循环循环
  • 如果字符是数字,则将其转换为int(int i=x-“0”)
  • 将整数添加到步骤#1中的输出变量
  • 循环结束时,返回步骤#1中的输出变量

  • 虽然有一个可接受的答案(并且不难获得OP的期望行为,只需对其进行少量增强),但我想使用正则表达式给出另一种选择:

    int i = 0;
    for (String s : "asdfa800dadsadasdwwfvv0002".split("\\D+")) {
        i += (s.isEmpty() ? 0 : Integer.parseInt(s));
    }
    System.out.println("result : " + i);
    
    简而言之:使用非数字字符拆分字符串。将拆分结果的每一部分转换为整数并求和


    如果您使用的是Java 8,代码可以进一步“简化”为:


    旁注-你可能想看看你的逻辑有错误,而不是那里那句巨大的
    if
    语句。在您的
    if
    中,您需要
    ==
    &
    。即使这样,你也不会得到你想要的结果,但至少不会是0。似乎答案不是解决OP所要求的问题(我不明白他为什么接受P)。例如,对于输入
    75Number5
    ,您的方法将给出
    755
    ,而OP正在寻找
    80
    75+5
    ),即使要实现您正在做的事情,我也宁愿做一个简单的
    int result=Integer.parseInt(myString.replaceAll(\\d,“)而不是长for循环。
    
      int sum = Arrays.stream(yourInputString.split("\\D+"))
                  .filter(s-> !s.isEmpty()).mapToInt(Integer::parseInt).sum();