有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用BufferedReader读取多行整数时发生java错误

我得到一个例外:

Exception in thread "main" java.lang.NumberFormatException: For input string: "55 45 65 88 "
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)

使用此代码时:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String line = br.readLine();
int noOfStudents = Integer.parseInt(line); //firstline contains 1 integer.

ArrayList <Integer> marks = new ArrayList<Integer>();

line = br.readLine(); //second line contains a line of integers

StringTokenizer tokens = new StringTokenizer(line, "\\s+");
// to break the line into tokens 

while (tokens.hasMoreTokens())
{
    marks.add(Integer.valueOf(tokens.nextToken())); //error here
    //when I am converting tokens into integers its giving error
}

样本输入:

4
55 45 65 88 (here, when I press enter it gives me the above stated errors)


共 (2) 个答案

  1. # 1 楼答案

    StringTokenizer不支持正则表达式

    StringTokenizer tokens = new StringTokenizer(line, "\\s+");
    // This will look for literal "\s+" string as the token.
    

    用这个代替

    StringTokenizer tokens = new StringTokenizer(line, " "); // Just a space.
    

    Edit:正如@MasterOdin所指出的,StringTokenizer的默认分隔符是一个空格" "。因此,下面的方法也同样适用

    StringTokenizer tokens = new StringTokenizer(line);
    
  2. # 2 楼答案

    您可以选择以下简单方法:

    String []m=br.readLine().split(" "); // split the line delimited with space as array of string.
     for(int i=0;i<m.length;i++){
        marks.add(Integer.valueOf(m[i]));  // add to the marks array list
     }
    

    编辑:根据T.G

    for (String s : br.readLine().split("\\s+")) {
       marks.add(Integer.valueOf(s));
    }