ArrayList <Integer> referenceNom = new ArrayList <Integer>();
ArrayList <String> bookTitle = new ArrayList <String>();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("Booklist.txt"));
while ((br.readLine()) != null ){
for (int count = 1; count <= 44; count++){
if (count % 2 == 1){
referenceNom.add(Integer.parseInt(br.readLine()));
System.out.print(referenceNom.get(count));
}else {
bookTitle.add(br.readLine());
System.out.print(bookTitle.get(count));
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
我正在尝试创建一个读取文本文件行的阅读器,在本例中为“Booklist.txt”。问题是我继续收到java.lang.NumberFormatException错误。文本文件由44行组成,第一行是数字,第二行是书名,第三行是数字,依此类推。我试图创建一个读取器,检查行号是偶数还是奇数,并根据这种情况将该行文本添加到整数arraylist或string arraylist。数字的整数arraylist和书名的字符串arraylist。此外,我试图通过创建一个计数器来跟踪行号,每次读取一行时,计数器都会加1。
非常感谢任何帮助,提前谢谢。
答案 0 :(得分:0)
你&#34;扔掉&#34;第一行。因此,您首先获得第一个标题,而不是第一个数字。你应该只使用1个循环,而不是while循环和for循环:
String line;
while ((line = br.readLine()) != null ){
referenceNom.add(Integer.parseInt(line));
bookTitle.add(br.readLine());
}
或
for (int count = 1; count <= 44; count++){
if (count % 2 == 1){
referenceNom.add(Integer.parseInt(br.readLine()));
} else {
bookTitle.add(br.readLine());
}
}
应该有效。
答案 1 :(得分:0)
int count = 0;
String line = null;
while (line = (br.readLine() != null)) {
if (count % 2 == 0) {
referenceNom.add(Integer.parseInt(line));
} else {
bookTitle.add(line);
}
count++;
}
如果有任何不清楚的地方,请告诉我。
答案 2 :(得分:0)
首先,将readed线存储在Variable
上String line=br.readLine();
然后您可以使用Try-Cach来识别值的类型,因此您的代码可能是这样的:
String line=null;
while ((line=br.readLine()) != null ){
try{
referenceNom.add(Integer.parseInt(line));
System.out.print(referenceNom.get(count));
}catch(java.lang.NumberFormatException e){
bookTitle.add(line);
System.out.print(bookTitle.get(count));
}catch(Exception e){
//Unexpected Exception
e.printStackTrace();
}
}
并且像这样,可能有多于或少于44行,你不需要改变你的代码