关于java:当输入文本时,尝试从输入计算总和

Trying to calculate a sum from input, when text is thrown in as well

让输入通过扫描仪。它有数字、字母和空格。

字母被去掉,只留下空格和数字。

如果输入时不带空格,则可以正常工作,但如果添加空格,则会引发错误:

java.lang.NumberFormatException: For input string:"" (in
java.lang.NumberFormatException)

这是针对行应用的

int dataint=integer.parseint(数据[i]);

Stderr outputs
java.lang.NumberFormatException: For input string:"" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:592) at
java.lang.Integer.parseInt(Integer.java:615) at
Program2.main(Program2.java:21)

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.*;
import java.io.*;

public class Program2 {

public static void main(String[] args) {
    Scanner kb = new Scanner(System.in);
    String input = kb.nextLine();
    input = input.replaceAll("[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]","");
    System.out.println(input);
    while(!input.equals("#")){
        String[] data = input.split("");
        int sum = 0;
        if (!input.equals("")){
            for(int i = 0; i < data.length; i++){
                int dataInt = Integer.parseInt(data[i]);
                sum = sum + dataInt;

            }

        }
        System.out.println(sum);
        input = kb.nextLine();
    }
} //main


} // class Program2


结果表明,这个程序应该提取每行中的所有数字,并将它们相加。每行都可以自由地与字符和空格混合。例:fsdjs 3 8 herlks 983生产994。

有几件事不对

1
2
if (!input.equals(""))
    for(int i = 0; i < data.length; i++){

只检查输入是否为空,但它应该是我们应该担心的拆分子字符串数组,因为这是我们应该操作的。调用split()后将有空字符串。应该是真的

1
2
for(int i = 0; i < data.length; i++){
    if (!data[i].equals(""))

在运行代码时,有时程序在调用parseInt()时会遇到空格。不知道它是如何工作的,但它与replaceAll()的数量有关。

字符串输入基本上是由一系列字母和空格分隔的数字列表。你可以用input.split("[^\\d]+)来代替多次调用replaceAll()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.*;
import java.io.*;

public class Program2 {
    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        String input = kb.nextLine();
        System.out.println(input);

        while(!input.equals("#")) {
            //                    VVV
            String[] data = input.split("[^\\d]+");
            int sum = 0;

            for(int i = 0; i < data.length; i++) {
                if (!data[i].equals("")) {
                    int dataInt = Integer.parseInt(data[i]);
                    sum = sum + dataInt;
                }
            }

            System.out.println(sum);
            input = kb.nextLine();
        }
    } //main
} // class Program2