我在这个简单的问题上浪费了很多时间,但是我不知道为什么nextLine()无法找到下一行。请帮助我,谢谢!
我尝试了以下代码:https://www.geeksforgeeks.org/scanner-nextline-method-in-java-with-examples/作为实验,很自然它起作用了,但是我自己却没有。
从文件中复制了变量“测试”。
代码部分:
ObservableList adatok;
@Override
public void initialize(URL url, ResourceBundle rb) {
int lines = 0;
try {
File f = new File("C:\\Users\\EDU_BYQN_0965\\Documents\\NetBeansProjects\\JSZ_SB\\src\\jsz_sb\\fokonyvi_kivonat.txt");
String test = "113,Vagyoni értékű jogok,3600,0,\n" +
"1173,Vagyoni értékű jogok értékhelyesbítése,360,0,\n" +
"1193,Vagyoni értékű jogok értékcsökkenése,0,2400,\n" +
"5,t,5,5,";
Scanner s = new Scanner(f);
while (s.hasNext() && s.nextLine() != null) lines++;
String[][] array = new String[lines][4];
String[] temporary = new String[4];
for (int i = 0; i < lines; i++) {
temporary = s.nextLine().split(",");
for (int j = 0; j < 4; j++) {
array[i][j]=temporary[j];
adatok = FXCollections.observableArrayList(
new TrialBalance(array[i][0], array[i][1], Integer.parseInt(array[i][2]), Integer.parseInt(array[i][3])));
}
}
} catch (FileNotFoundException ex) {
Logger.getLogger(FXML_scene2Controller.class.getName()).log(Level.SEVERE, null, ex);
}
“临时”数组应包含文件的第一行,至少应在第一个循环处,并且不应出现运行时错误。
答案 0 :(得分:4)
您在此行中用尽了Scanner
:
while (s.hasNext() && s.nextLine() != null) lines++;
它停止了,因为没有更多的行。 (请注意,支票hasNext()
与调用next()
配对,而hasNextLine()
与nextLine()
配对)。
因此,如果您尝试从Scanner
中读取更多行,则没有更多内容可读取了。
您要么需要创建Scanner
的新实例;要么或使用不需要知道先验大小的数据结构,例如List
(或根据需要调整数组的大小;但是当{{ 1}}透明地为您做到这一点。