我制作了一个文本文件,其中包含5个随机字符串,并且我试图将内容放入名为“ text”的数组中。 最后4个字符串可以正常工作,但是第一个字符串被打印为null?
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;
public class Task4 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("filepath");
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
String[] txt = new String[5];
do {
for (int i = 1; i < 5; i++) {
txt[i] = br.readLine();
}
} while ((line = br.readLine()) != null);
System.out.println(txt[0]); // prints null
System.out.println(txt[1]); // works fine
System.out.println(txt[2]); // works fine
System.out.println(txt[3]); // works fine
System.out.println(txt[4]); // works fine
}
}
编辑
我尝试将for循环更改为从0开始,但是它完全跳过了第一个字符串,并使最后一个字符串([txt [4])打印为null ...
答案 0 :(得分:3)
好,您的循环从1
开始,即txt[0]
从未分配任何值。
更改
for (int i = 1; i < 5; i++)
到
for (int i = 0; i < 5; i++)
你应该没事。
此外,在循环外首次调用br.readLine()
时,第一行将被丢弃。并且您的资源(FileReader
和BufferedReader
)没有关闭。
像这样更改代码:
try (BufferedReader br = new BufferedReader(new FileReader("filepath"))) {
String[] txt = new String[5];
int i = 0;
String line = null;
while ((line = br.readLine()) != null && (i < 5)) {
txt[i] = line;
i++;
}
}
答案 1 :(得分:1)
您已经这样声明了行变量,
String line = br.readLine();
消耗第一行。
只需将其初始化为null。
String line = null;
此外,在for循环中使i = 0而不是1,这会引起问题。另外,您还可以将行读入line变量,但不要将其分配给数组,因此也应将其删除。
实际上,您不需要在while循环内使用for循环,而是可以使代码像这样,
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("filepath");
BufferedReader br = new BufferedReader(fr);
String[] txt = new String[5];
for (int i = 0; i < 5; i++) {
txt[i] = br.readLine();
}
System.out.println(txt[0]); // prints null
System.out.println(txt[1]); // works fine
System.out.println(txt[2]); // works fine
System.out.println(txt[3]); // works fine
System.out.println(txt[4]); // works fine
br.close();
}
这将打印您的所有五行,没有任何问题。
答案 2 :(得分:0)
这是因为在for循环中,您的int从行号1开始,而不是从行号0开始。
for (int i = 1; i < 5; i++)
应该是
for (int i = 0; i < 5; i++)