我正在尝试编写一个程序,其中用户输入一系列数字作为字符串,然后程序将字符串拆分为单独的数字,按类型对它们进行分类,按组一起列出,然后将它们一起添加。例如,用户输入1,5,3L,284L,4.3和2.34。然后程序将1和5一起列出,3和284一起列出,4.3和2.34一起列出。然后,程序显示数字299.64。但是,我收到了一个错误。我会发布到目前为止的内容。我的问题可能来自哪些想法?谢谢。
这是我的错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1, 2L, 3.3"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at change.NumberArray.Convert(NumberArray.java:21)
at change.TestNumberArray.main(TestNumberArray.java:9)
代码:
package change;
import java.util.ArrayList;
import java.util.Scanner;
public class NumberArray {
static Scanner s = new Scanner(System.in);
public static void Convert(){
System.out.print("Enter numbers by: ");
String input = s.nextLine();
String[] inputString = input.trim().split(" , ");
int i = 0;
ArrayList<Long> listLong = new ArrayList<Long>();
ArrayList<Double> listDouble = new ArrayList<Double>();
ArrayList<Integer> listInt = new ArrayList<Integer>();
while (i < inputString.length){
if (inputString[i].contains("L")){
long temp = Long.parseLong(inputString[i]);
listLong.add(temp);
i++;
}
else if (inputString[i].contains(".")){
double temp = Double.parseDouble(inputString[i]);
listDouble.add(temp);
i++;
}
else{
int temp = Integer.parseInt(inputString[i]);
listInt.add(temp);
i++;
}
}
System.out.println("Here are the long numbers you entered:");
for (int q = 0; q < listLong.size(); q++)
{
System.out.println(listLong.get(q));
}
System.out.println("Here are the double numbers you entered:");
for (int q = 0; q < listDouble.size(); q++)
{
System.out.println(listDouble.get(q));
}
System.out.println("Here are the integer numbers you entered:");
for (int q = 0; q < listInt.size(); q++)
{
System.out.println(listInt.get(q));
}
System.out.println("Here is the sum of the numbers you entered: ");
double sum = 0;
for (int z = 0; z < inputString.length; z++)
{
sum = sum + Double.parseDouble(inputString[z]);
}
System.out.print(sum);
}
}
答案 0 :(得分:2)
你有:
String[] inputString = input.trim().split(" , ");
那将匹配空格 - &gt;逗号 - &gt;空间确切。 (这个拆分分隔符无法正常工作的一个很好的提示是整个未分割的输入字符串在错误消息中。)你可以使用这样的正则表达式来忽略空格:
String[] inputString = input.trim().split("\\s*,\\s*");
或者你可以用逗号分开......
String[] inputString = input.trim().split(",");
...然后稍后再使用inputString[i].trimmed()
。