尝试将字符串解析为文件中的int。获取NumberFormatException:对于输入字符串:“”,eaven tho string似乎是一个很好的int字符串。 Java的

时间:2012-03-11 22:36:30

标签: java bufferedreader numberformatexception

我一直试图解决这个问题几个小时,我希望你们中的一个可以帮助我。我有一个文件(实际上有两个,但不重要)有一些行和列,数字和空格之间。我正在尝试用BufferedReader读取它们。这很有效。我可以打印出字符串&然而,我想要的。但是当我尝试解析那些字符串和字符时,我得到以下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at FileProcess.processed(FileProcess.java:30)
at DecisionTree.main(DecisionTree.java:16)

根据我在Google上发现的内容,我认为错误位于我阅读文件的方式。

public class ReadFiles {
private BufferedReader read;
public ReadFiles(BufferedReader startRead) {
    read = startRead; 
}

public String readFiles() throws IOException {
    try {
        String readLine = read.readLine().trim();
        String readStuff = "";
        while(readLine != null) {
            readStuff += (readLine + "\n");
            readLine = read.readLine();
        }
            return readStuff;
    }
    catch(NumberFormatException e) {
        return null;
    }
}

对于解析位

public class FileProcess {

public String processed() throws IOException {
fileSelect fs = new fileSelect();
ReadFiles tr = new ReadFiles(fs.traning());
String training = tr.readFiles();   

ReadFiles ts = new ReadFiles(fs.test());
String test = ts.readFiles();
List liste = new List(14,test.length());

String[] test2 = test.split("\n");

for(int i = 0; i<test2[0].length(); i++) {      
    char tmp = test.charAt(i);
    String S = Character.toString(tmp).trim();

    //int i1 = Integer.parseInt(S);

    System.out.print(S);        
}

这不是我计划对输出执行的实际代码,但错误会显示在已注释掉的代码中。所以我的字符串输出如下:

12112211

解析为整数似乎很好。但它不起作用。我试图手动查看char位置0和1中的内容,0表示我得到1,但是1表示我没有得到""。那么如何删除""?我希望你们可以帮助我,如果你需要更多信息,请告诉我。但我想我已经涵盖了所需要的东西。

提前致谢:)

是的,还有另外一件事:如果我用""替换"0"它可以正常工作,但是我得到了所有那些我找不到一个聪明的删除方式的零。但有可能在解析或其他什么时跳过它们吗?我的文件只保存1和2,因此如果可能,它不会干扰任何内容。

2 个答案:

答案 0 :(得分:0)

如果你有2个彼此相邻的分裂字符(即\ n \ n)或者如果有一个空白字符被传递给trim()调用,那么将返回字符串“”,所以忽略空字符串并携带上。

答案 1 :(得分:0)

您可以使用Scanner类来解析整数,跳过空白:

sc = new java.util.Scanner (line);
sc.nextInt ();

另一个想法是修剪线条,拆分和解析零件:

lin = line.trim ();
String [] words = lin.split (" +");
for (String si : words) 
    Integer.parseInt (si);