当前正在编辑代码以创建跳过列表,并且我试图读取一个文件,该文件具有需要插入,搜索或删除的数据(分别由i,s,d表示。
[我在尝试运行它并在catch语句中打印stacktrace时似乎抛出了数字格式异常,看起来好像没有读取第一个字符,应该是“ i”。
这里是我的主要代码当前的样子,因为这似乎是问题所在。
public static void main(String[] args) {
Main list = new Main();
boolean result = false;
try {
BufferedReader br;
br = new BufferedReader(new FileReader("text.txt"));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
String[] input = everything.split(",");
for (int i = 0; i < input.length; i++) {
String temp = input[i];
System.out.printf("%s", input[i]);
if (temp.startsWith("i")) {
result = list.insert(Integer.parseInt(temp.substring(2)));
} else if (temp.startsWith("s")) {
Node node = list.search(Integer.parseInt(temp.substring(2)));
if (node != null) {
System.out.println(temp.substring(2) + " found");
} else {
System.out.println(temp.substring(2) + " not found");
}
} else if (temp.startsWith("d")) {
result = list.delete(Integer.parseInt(temp.substring(2)));
if (result == true) {
System.out.println(temp.substring(2) + " deleted");
} else {
System.out.println(temp.substring(2) + " not deleted");
}
} else if (temp == "p") {
System.out.println("For the input file ");
System.out.println("With the RNG succeeded");
System.out.println("The current skip list is shown below");
list.printAll();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这是我的示例输入数据文本文件的样子
i 503
i 302
i 596
i 198
i 270
i 629
i 603
i 110
i 354
i 947
p
q
[当它运行并吐回到堆栈跟踪时说
java.lang.NumberFormatException: For input string: "503
i 302
i 596
i 198
i 270
i 629
i 603
i 110
i 354
i 947
p
q
"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at Main.main(Main.java:295)
所以我目前的猜测是,出于某种原因,当文本数据文件中确实存在503时,它没有读取503前面的“ i”
问题是您要用逗号分割数据,而数据根本没有逗号。因此,当到达temp.substring(2)
时,它实际上使用以下字符串并尝试解析:
503
i 302
i 596
i 198
i 270
i 629
i 603
i 110
i 354
i 947
p
q
这是整个文件的内容(不是数字)。
只需用换行符String[] input = everything.split(",");
(\n
)替换逗号(String[] input = everything.split("\n");
),它就可以使用。