尝试添加到阵列时,数组超出Bounds错误

时间:2015-04-11 11:30:38

标签: java

我已经分解了我的代码并逐一查看它以查看此错误,我不知道如何处理它,我尝试从文件中读取多行并将数据存储到数组中。我可以将details[0]存储为用户名,但是当我尝试添加details[1]details[2]时,我收到了错误消息。有人能帮帮我吗?

文件中的数据:

test|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|500
testing|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|400
testtry|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|300
testnew|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|200

代码在

之下
    Scanner read = new Scanner(new File("players.dat"));
    String line;

    ArrayList<String> players = new ArrayList<String>();
    while (read.hasNextLine()){
        line = read.nextLine();
        String[] details = line.split("\\|");
        String UserN = details[0];
        String Password = details[1];
        String Chips = details[2];

2 个答案:

答案 0 :(得分:6)

你可能正在读一个空行。在没有检查项目存在之后,切勿拆分。

尝试打印您要拆分的行,以了解您收到错误的原因。终身提示:始终使用调试器,它就在那里。

注意:您逃脱|字符很好,因为split使用正则表达式,而|正则表达式意味着:&#34;空字符串,或。一个空字符串&#34;。

答案 1 :(得分:0)

(这是一个扩展评论 - 遗憾的是,不可能将可读代码放在实际评论中。)

该问题除了代码和数据之外的其他地方。

以下是将给定代码应用于给定数据的简单程序。它不会重现问题。我强烈支持进一步调试的建议,并建议尝试构建SSCCE

import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Scanner;

public class Test {
  public static void main(String[] args) {
    String inputData = "test|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|500\n"
        + "testing|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|400\n"
        + "testtry|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|300\n"
        + "testnew|9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08|200\n";
    Reader inputReader = new StringReader(inputData);
    Scanner read = new Scanner(inputReader);
    String line;

    ArrayList<String> players = new ArrayList<String>();
    while (read.hasNextLine()) {
      line = read.nextLine();
      String[] details = line.split("\\|");
      String UserN = details[0];
      String Password = details[1];
      String Chips = details[2];
      System.out.printf("UserN=%s, Password=%s, Chips=%s%n", UserN, Password,
          Chips);
    }
    read.close();
  }
}

输出:

UserN=test, Password=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, Chips=500
UserN=testing, Password=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, Chips=400
UserN=testtry, Password=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, Chips=300
UserN=testnew, Password=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, Chips=200