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