ArrayOutofBounds和NumberFormat异常

时间:2017-03-29 18:32:41

标签: java arrays exception

使用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)

2 个答案:

答案 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)

您的输入采用(Stringint),...的形式,但您以('int','String')的形式解析它们,...,基本上这一行:

ArtistNode newA = new ArtistNode(tokens[1],Integer.parseInt(tokens[0].trim()));

应如下所示:

ArtistNode newA = new ArtistNode(tokens[0],Integer.parseInt(tokens[1].trim()));