我有这个简单的方法:
<div id="carousel">
<div class="hideLeft">
<img src="https://image.tmdb.org/t/p/w300<?php echo $pic1; ?>">
</div>
<div class="prevLeftSecond">
<img src="https://image.tmdb.org/t/p/w300<?php echo $pic2; ?>">
</div>
<div class="prev">
<img src="https://image.tmdb.org/t/p/w300<?php echo $pic3; ?>">
</div>
<div class="selected">
<img src="https://image.tmdb.org/t/p/w300<?php echo $pic4; ?>">
</div>
<div class="next">
<img src="https://image.tmdb.org/t/p/w300<?php echo $pic5; ?>">
</div>
<div class="nextRightSecond">
<img src="https://image.tmdb.org/t/p/w300<?php echo $pic6; ?>">
</div>
<div class="hideRight">
<img src="https://image.tmdb.org/t/p/w300<?php echo $pic7; ?>">
</div>
</div>
<h2><font color="white">About the Movie</h2>
<p><?php echo $bio4; ?></p>
</div>
<div class="buttons">
<button id="prev">Prev</button>
<button id="next">Next</button>
</div>
正如您在第8行中看到的那样,我包括用于调试目的的打印 我希望此方法从此txt文件返回String:
private String read(String filePath) throws IOException {
FileReader fileReader = new FileReader(filePath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String fileContent = "";
StringBuilder stringBuilder = new StringBuilder(fileContent);
while (bufferedReader.readLine() != null){
System.out.println(bufferedReader.readLine());
stringBuilder.append(bufferedReader.readLine());
}
return fileContent;
}
由于某种原因,输出是这样的:
1a1
2b 2a
3c 3b 3a
4d 4cr 4bb4 4a
5e 5d 5c 5b 5ax
6f 6ea 6d 6ca 6bb 6a
7g 7f 7ea
为什么它只读取第二行和第五行? 空值是从哪里来的? 最后返回的字符串似乎为空。
我想了解这里发生的事情。谢谢:)
答案 0 :(得分:7)
这是因为您在while
循环的null
检查中使用了每三行,打印从第二行开始的第三行,并从第三行开始添加第三行,如下所示:
1 null check
2 print
3 append
4 null check
5 print
6 append
7 null check
8 print
9 append
... and so on
您应该将读取的行保存在String
变量中,并在循环中使用它,如下所示:
String line;
while ((line = bufferedReader.readLine()) != null){
System.out.println(line);
stringBuilder.append(line);
}
现在,循环头将分配和null
检查结合在一起,并且从readLine
分配的变量代表从文件读取的最后一行。
答案 1 :(得分:2)
每个readLine()
都在阅读一条全新的文章,以分析发生的情况,让我们为每个readLine()
呼叫命名。
while (bufferedReader.readLine() != null) { // Read 1
System.out.println(bufferedReader.readLine()); // Read 2
stringBuilder.append(bufferedReader.readLine()); // Read 3
}
现在让我们将每个readLine()
与它所读的行相关联:
1a1 // Read 1 while loop condition
2b 2a // Read 2 this is when we print it
3c 3b 3a // Read 3 append to stringBuilder
4d 4cr 4bb4 4a // Read 1 while loop condition
5e 5d 5c 5b 5ax // Read 2 this is when we print it
6f 6ea 6d 6ca 6bb 6a // Read 3 append to stringBuilder
7g 7f 7ea // Read 1 while loop condition
// Read 2 this is when we print it (null)
// Read 3 append to stringBuilder
如您所见,您正在消耗很多行,而只打印了几行。其他人已经指出了解决此问题的好方法,因此不在此答案中。
答案 2 :(得分:0)
好,这里的问题是:您每次调用bufferedReader.readLine()
,实际上每次都会读取一个新行,因此第一行在while
中被读取并被丢弃,第二行是{{ 1}}-ed,第三个写入文件,依此类推。您需要存储读取的第一行,并以此来工作,例如:
System.out.println
答案 3 :(得分:0)
1a1 // Read 1 while (bufferedReader.readLine() != null)
next 2a // Read 2 System.out.println(bufferedReader.readLine()); --print
3c 3b 3a // Read 3 stringBuilder.append(bufferedReader.readLine());-next