Java 尝试运行我的程序时收到NumberFormatException错误

Java 尝试运行我的程序时收到NumberFormatException错误,java,Java,我之前问过这个问题,但被要求添加更多信息,之后再也没有得到回复。提前道歉。我不是想给这个网站发垃圾邮件。我只是想寻求帮助 我在线程“main”java.lang.NumberFormatException中收到错误异常:对于下面代码中的输入字符串:“350”。我很难解决这个问题。有没有人能解释一下这是怎么回事?根据我的理解,这通常意味着错误在第3行,第50行正确吗 package report.generator; import java.io.BufferedReader; impor

我之前问过这个问题,但被要求添加更多信息,之后再也没有得到回复。提前道歉。我不是想给这个网站发垃圾邮件。我只是想寻求帮助

我在线程“main”java.lang.NumberFormatException中收到错误异常:对于下面代码中的输入字符串:“350”。我很难解决这个问题。有没有人能解释一下这是怎么回事?根据我的理解,这通常意味着错误在第3行,第50行正确吗

 package report.generator;

 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.BufferedWriter;
 import java.io.IOException;

 public class ReportGenerator
 {


 public static void main(String[] args)
 {
    BufferedReader br = null;
    BufferedWriter bw = null;

    try
    {
        br = new BufferedReader(new FileReader("C:\\sprocketorders.txt"));
        String line;
        String element[] = new String[2];
        int   sum[] = new int[5];
        File file = new File ("C:\\sprocketordersreport.txt");

        while ((line = br.readLine()) != null)
        {
            element = line.split(" ");

            switch(Integer.parseInt(element[0]))
            {
                case 1:
                    sum[0] = sum[0] + Integer.parseInt(element[1]);
                    break;
                case 2:
                    sum[1] = sum[1] + Integer.parseInt(element[1]);
                    break;
                case 3:
                    sum[2] = sum[2] + Integer.parseInt(element[1]);
                    break;
                case 4:
                    sum[3] = sum[3] + Integer.parseInt(element[1]);
                    break;
                case 5:
                    sum[4] = sum[4] + Integer.parseInt(element[1]);
                    break;
            }
        }

        if (!file.exists())
        {
            file.createNewFile();
        }

        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        bw = new BufferedWriter(fw);
        bw.write("Spacely Sprockets\nTaking Sprockets into the Future\nSales Summary Report\nSprocket Number Total Quantity Sold\n");
        for(int i = 0; i < sum.length; i++)
            bw.write((i + 1) + "\t" + sum[i] + "\n");

    }
    catch (IOException e)
    {
         e.printStackTrace();

    }
    finally
    {
       try
        {
            if (br != null)
                br.close();
            if (bw != null)
                bw.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        }
      }

  }
这是我试图获取的输出报告。左侧的每个编号都是链轮编号。右侧的数字反映了每个链轮的销售数量

这是尝试运行时的完全异常:

Exception in thread "main" java.lang.NumberFormatException: For input string: "3    50"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at report.generator.ReportGenerator.main(ReportGenerator.java:32)
试试这个:

line = line.trim().replaceAll("\\s+", " ");
element = line.split(" ");

您正在读取的文件有一个元素“350”。介于3和5之间的字符可能是空白或特殊字符。要么删除/更正该行,要么处理您在读取行时遇到的任何异常

我建议您只使用
+=
和;不管我在文件中的行上加了多少空格,它都可以在这里工作-

while ((line = br.readLine()) != null) {
    StringTokenizer st = new StringTokenizer(line); // On the line.
    String a = null;
    String b = null;
    if (st.hasMoreElements()) {
      a = st.nextToken();
      if (st.hasMoreElements()) {
        b = st.nextToken();
      }
    }
    if (a != null && b != null) {
      switch (Integer.parseInt(a.trim())) {
      case 1:
        sum[0] += Integer.parseInt(b.trim());
        break;
      case 2:
        sum[1] += Integer.parseInt(b.trim());
        break;
      case 3:
        sum[2] += Integer.parseInt(b.trim());
        break;
      case 4:
        sum[3] += Integer.parseInt(b.trim());
        break;
      case 5:
        sum[4] += Integer.parseInt(b.trim());
        break;
      }
    }
  }
我运行了你的程序

它有以下问题

当您使用缓冲读取器阅读新行时,实际上您得到的是整行内容

但当我检查输入文件时,每行之间有一行是空的

但缓冲区读取器读取行将空行视为一行,并尝试解析它

但解析空行肯定会给我们带来数字格式的异常

所以,在分割和处理行之前,请检查行是否为空,如果不是空,请继续

这是我在拆分一行并继续之前添加的内容

if(!line.equals(""))
下面是完整的计划,这是工作的很好,我现在让我知道任何问题

package com.kb;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class ParseIntDemo {


    public static void main(String[] args)
     {
        BufferedReader br = null;
        BufferedWriter bw = null;

        try
        {
            br = new BufferedReader(new FileReader("D:\\sprocketorders.txt"));
            String line;
            String element[] = new String[2];
            int   sum[] = new int[5];
            File file = new File ("D:\\sprocketordersreport.txt");

            while ((line = br.readLine()) != null)
            {
                if(!line.equals("")){
                element = line.split(" ");

                switch(Integer.parseInt(element[0]))
                {
                    case 1:
                        sum[0] = sum[0] + Integer.parseInt(element[1]);
                        break;
                    case 2:
                        sum[1] = sum[1] + Integer.parseInt(element[1]);
                        break;
                    case 3:
                        sum[2] = sum[2] + Integer.parseInt(element[1]);
                        break;
                    case 4:
                        sum[3] = sum[3] + Integer.parseInt(element[1]);
                        break;
                    case 5:
                        sum[4] = sum[4] + Integer.parseInt(element[1]);
                        break;
                }
            }

            if (!file.exists())
            {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            bw = new BufferedWriter(fw);
            bw.write("Spacely Sprockets\nTaking Sprockets into the Future\nSales Summary Report\nSprocket Number Total Quantity Sold\n");
            for(int i = 0; i < sum.length; i++)
                 bw.write((i + 1) + "\t" + sum[i] + "\n");
            }

        }
        catch (IOException e)
        {
             e.printStackTrace();

        }
        finally
        {
           try
            {
                if (br != null)
                    br.close();
                if (bw != null)
                    bw.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            }
          }

}
package com.kb;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.IOException;
公共类ParseIntDemo{
公共静态void main(字符串[]args)
{
BufferedReader br=null;
BufferedWriter bw=null;
尝试
{
br=新的BufferedReader(新的文件读取器(“D:\\sprocketorders.txt”);
弦线;
字符串元素[]=新字符串[2];
整数和[]=新整数[5];
File File=新文件(“D:\\sprocketordersreport.txt”);
而((line=br.readLine())!=null)
{
如果(!line.equals(“”){
元素=行。拆分(“”);
开关(Integer.parseInt(元素[0]))
{
案例1:
sum[0]=sum[0]+Integer.parseInt(元素[1]);
打破
案例2:
sum[1]=sum[1]+Integer.parseInt(元素[1]);
打破
案例3:
sum[2]=sum[2]+Integer.parseInt(元素[1]);
打破
案例4:
sum[3]=sum[3]+Integer.parseInt(元素[1]);
打破
案例5:
sum[4]=sum[4]+Integer.parseInt(元素[1]);
打破
}
}
如果(!file.exists())
{
createNewFile();
}
FileWriter fw=新的FileWriter(file.getAbsoluteFile());
bw=新的缓冲写入程序(fw);
bw.write(“Spacely链轮\n将链轮带入未来\n销售汇总报告\n火箭编号总销售数量”\n”);
对于(int i=0;i
您希望每行输入的输出是什么,为什么?此外,这是您的第一行输入。请发布你的整个异常,它会告诉你源代码中哪一行抛出了异常。“350”不是一个数字;是两个数字。如果你犯了那个错误,那就是你要传递的。而且。。。刚刚看到你的最后一段。你告诉它在一个单独的空间里分开。。。这不是你文件中的内容。Java作者一定在哭。他们在这段时间里都有一个有用的信息系统,但是人们甚至不读它们,或者认为它们很重要,可以用它们的编码问题来发布……帮助你读异常输出,例外是从第65行来的。在while循环中?无论您在哪里
element=line.split(“”)将另一行放在它的正上方。@Takendark收到了。我试过了。现在得到了这个异常:java.io.IOException:java.io.WinNTFileSystem.CreateFileExclusive(本机方法)的java.io.File.createNewFile(File.java:1006)的java.io.WinNTFileSystem.CreateFileExclusive(本机方法)的访问被拒绝“这对我来说是新的,我现在把火炬传递给更有经验的人。”Takendark感谢迄今为止的帮助。我回答了关于65行的问题。如果没有添加line=line.trim().replaceAll(“\\s+”,”),仍然可以解决此问题;那太好了。我在使用你的代码时遇到了同样的NumberFormatException错误。我可以运行这个程序并获得如下输出,有什么特殊字符吗?空间Spr
package com.kb;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class ParseIntDemo {


    public static void main(String[] args)
     {
        BufferedReader br = null;
        BufferedWriter bw = null;

        try
        {
            br = new BufferedReader(new FileReader("D:\\sprocketorders.txt"));
            String line;
            String element[] = new String[2];
            int   sum[] = new int[5];
            File file = new File ("D:\\sprocketordersreport.txt");

            while ((line = br.readLine()) != null)
            {
                if(!line.equals("")){
                element = line.split(" ");

                switch(Integer.parseInt(element[0]))
                {
                    case 1:
                        sum[0] = sum[0] + Integer.parseInt(element[1]);
                        break;
                    case 2:
                        sum[1] = sum[1] + Integer.parseInt(element[1]);
                        break;
                    case 3:
                        sum[2] = sum[2] + Integer.parseInt(element[1]);
                        break;
                    case 4:
                        sum[3] = sum[3] + Integer.parseInt(element[1]);
                        break;
                    case 5:
                        sum[4] = sum[4] + Integer.parseInt(element[1]);
                        break;
                }
            }

            if (!file.exists())
            {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            bw = new BufferedWriter(fw);
            bw.write("Spacely Sprockets\nTaking Sprockets into the Future\nSales Summary Report\nSprocket Number Total Quantity Sold\n");
            for(int i = 0; i < sum.length; i++)
                 bw.write((i + 1) + "\t" + sum[i] + "\n");
            }

        }
        catch (IOException e)
        {
             e.printStackTrace();

        }
        finally
        {
           try
            {
                if (br != null)
                    br.close();
                if (bw != null)
                    bw.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            }
          }

}