我已经分解了我的代码并逐一查看它以查看此错误,我不知道如何处理它,我尝试从文件中读取多行并将数据存储到数组中。我可以将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];
答案 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