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

Java 将字符串拆分为字符串数组导致NumberFormatException,java,regex,parsing,Java,Regex,Parsing,我很难将文本文件中的每一行分割成一个字符串数组,并按需要使用它。split()似乎工作正常。最后我得到了一个字符串数组,其中字符串数组的第一个槽包含一个我需要解析为int的数字,以继续我的代码。由于某种原因,我一直得到下面显示的错误,我似乎无法理解 我的目标是将包含字母的文本文件的每一行存储在一个数组中,并将该行的第一个值作为整数进行解析。一旦我完成了这项工作,我需要能够独立地使用前面的每一组字母,所以我也尝试将它们放入数组中 我非常感谢你在这方面的帮助 非常感谢 注意:NuMgramars是文

我很难将文本文件中的每一行分割成一个字符串数组,并按需要使用它。split()似乎工作正常。最后我得到了一个字符串数组,其中字符串数组的第一个槽包含一个我需要解析为int的数字,以继续我的代码。由于某种原因,我一直得到下面显示的错误,我似乎无法理解

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

我非常感谢你在这方面的帮助

非常感谢

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

我的代码

    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...

            }   
        }
    }
我正在读取的文本文件:

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

您没有说明fin是什么,所以我无法说明它对next()和nextLine()的作用,但您可能正在提取字符串中的换行符

仅使用
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...

        }   
    }
}
numGrammars=Integer.parseInt(fin.nextLine());
System.out.println(“Num语法:+numGrammars”);
对于(int v=0;v
看起来您正试图解析aplhabets来代替数字。这就是为什么它抛出的
NumberFormatException
可能是字符
S
不,下一个字符不是S,而是数字2。当我不进行解析直接打印字符串[0]时,它会打印出2。当我试图将其解析为int,然后将其打印出来时,我遇到了这个错误。那么可能是添加了空格,请尝试使用
String.trim()
Integer.parseInt(“2”)
将引发异常。向我们展示整个代码可能更好。错误消息显示您试图
parseInt
一个空字符串。@MHZ代替
fin.next()
仅使用
fin.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...

        }   
    }
}