将字符串拆分为字符串数组导致NumberFormatException

时间:2013-01-30 19:05:56

标签: java regex parsing

我很难将每行从文本文件拆分成字符串数组并按照我的需要使用它。 split()似乎没问题。我最终得到一个字符串数组,其中strings数组的第一个插槽包含一个我需要解析为int的数字,以继续我的代码。出于某种原因,我不断得到下面显示的错误,我似乎无法弄清楚。

我的目标是简单地将包含字母的文本文件的每一行存储在一个数组中,并将该数字作为整数解析为该行的第一个值。一旦我完成了这个,我需要能够独立地使用前面的每一组字母,所以我也试图将它们放在一个数组中。

我很感激任何帮助。

非常感谢提前!

注意:numGrammars是文本文件第一行显示的第一个数字。

我的代码

    numGrammars = Integer.parseInt(fin.next());
    System.out.println("Num Grammars:" + numGrammars);


    for(int v=0; v < numGrammars; v++){
       int numVariables = Integer.parseInt(fin.next());
       System.out.printf("numVariables: %s", numVariables);

        for(int z=0; z < numVariables; z++){
            //reads in variable line
            String line = fin.nextLine();
            String[] strings = line.split(" ");

            for(int m=0; m < strings.length; m++){
               int numRules = Integer.parseInt(strings[0]);
               //All other array slots in strings array should be groups of letters on group per slot...

            }   
        }
    }

控制台输出

Num Grammars:2
numVariables: 3Exception 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 Methods.readFile(Methods.java:34)
at Main.main(Main.java:12)

我正在阅读的文字文件:

1
3
2 S AB BB
3 A BB a b
2 B b c

2 个答案:

答案 0 :(得分:2)

仅使用fin.nextLine()。调用next()后,光标位于numVariables值3之后,但之前换行符。在此之后调用nextLine()时,它会返回光标和换行符之间的所有内容,这是一个空字符串!每次使用nextLine()总是将光标放在换行符之后,一切正常。

numGrammars = Integer.parseInt(fin.nextLine());
System.out.println("Num Grammars:" + numGrammars);


for(int v=0; v < numGrammars; v++){
   int numVariables = Integer.parseInt(fin.nextLine());
   System.out.printf("numVariables: %s", numVariables);

    for(int z=0; z < numVariables; z++){
        //reads in variable line
        String line = fin.nextLine();
        String[] strings = line.split(" ");

        for(int m=0; m < strings.length; m++){
           int numRules = Integer.parseInt(strings[0]);
           //All other array slots in strings array should be groups of letters on group per slot...

        }   
    }
}

答案 1 :(得分:-2)

你没有说鳍是什么,所以我不能说它对next()和nextLine()的作用,但也许你正在拾取你的字符串中的换行符。