使用token split方法和解析int时,我得到了这两个异常。 ArrayOutofBounds,当我在代码中有printline语句时,另一个在我注释掉printline语句时
public class MyArtistNodes {
public ArrayList<ArtistNode> myArtistNodes = null;
public MyArtistNodes(String filename) {
Scanner input;
try {
input = new Scanner(new File(filename));
myArtistNodes = new ArrayList<ArtistNode>();
while(input != null && input.hasNext()) {
String line = input.nextLine();
String[] tokens = line.trim().split("@");
tokens = line.split(" ");
// System.out.println(tokens.length+" "+tokens[1]+" -- "+Integer.parseInt(tokens[0].trim()));
ArtistNode newA = new ArtistNode(tokens[1],Integer.parseInt(tokens[0].trim()));
myArtistNodes.add(newA);
}
input.close();
} catch (NumberFormatException | FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at MyArtistNodes.<init>(MyArtistNodes.java:27)
at Exam3Step3A.<init>(Exam3Step3A.java:6)
at Exam3.main(Exam3.java:6)
答案 0 :(得分:0)
错误NumberFormat异常可能是因为这一行:
ArtistNode newA = new ArtistNode(tokens[1],Integer.parseInt(tokens[0].trim()));
因为你可以看到你正在从一个字符串(标记[0])创建一个整数,因此,你的标记[0]有时不能是一个有效的数字,这就是为什么你得到那个例外。
ArrayIndexOutOfBoundsException异常
可能是因为你试图在一个不存在的位置读取数组,问题应该在同一行:
ArtistNode newA = new ArtistNode(tokens[1],Integer.parseInt(tokens[0].trim()));
也许是你的
String[] tokens = line.trim().split("@");
tokens = line.split(" ");
拆分并不适用于所有情况。
希望有所帮助
答案 1 :(得分:0)
您的输入采用(String
,int
),...的形式,但您以('int','String')的形式解析它们,...,基本上这一行:
ArtistNode newA = new ArtistNode(tokens[1],Integer.parseInt(tokens[0].trim()));
应如下所示:
ArtistNode newA = new ArtistNode(tokens[0],Integer.parseInt(tokens[1].trim()));