如何解决爪哇| InputStreamReader(System.in) – 它没有读取最后一行
一直在努力解决这个问题。长话短说,它不会读取 my input
的最后一行。
我想要它做什么...读取文件并退出。
就是这样。它在 file ( example: .txt )
上运行良好,但是当涉及到 System.in
时,代码 不起作用!烦人,当它应该很容易。
这里是重新创建的代码和照片!
StringBuilder strBuilder = new StringBuilder();
String line;
// for the last line to "end",I have to do \n! ... but how...?
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while((line = br.readLine()) != null) {
System.out.println(line);
strBuilder.append(line);
}
// Does not reach code
System.out.println(strBuilder.toString());
我知道 readLine()
在 \n
或 \r
上终止......在这种情况下,4 fourth line
确实 NOT 在之后有一个换行符,所以我尝试使用 !br.isEmpty()
或 !br.isBlank
来“查看” 4 fourth line
之后没有更多行......但我想我错过了一些东西。
( copy and paste this info into the console without a line break after 4 fourth line )
1 first line
2 second line
3 third line
4 fourth line
你会得到这个
如果您在控制台中按 4 fourth line
(因为您输入的是“\n”),则您 WILL 会打印出 ENTER
但这不是我的意思期待。
目前,它不会终止。它不会读取用户输入的最后一行。它将处于循环中。
请帮忙:)
解决方法
readline()
将读取输入到换行符或文件结尾(以先到者为准)。
如果操作正确,即通过管道将文件输入到 Java 程序的标准输入中,它应该可以工作。像这样:cat myfile.txt | java MyClass
或 java MyClass < myfile.txt
。如果您使用 FileInputStream
代替 System.in
,它也会起作用。
问题仅在于您从控制台手动输入输入时。在这种情况下,BufferedReader
无法知道您的输入何时完成,因此它会一直等到换行符或文件结束。在 Linux 中,您只需按 Ctrl-D
即可要求控制台关闭 Java 程序的标准输入。
在 Eclipse 中,您粘贴输入,然后单击其他窗格/窗口,然后单击控制台并按 CTRL
+Z
将其作为空行并退出
在 Windows 的命令提示符下,您必须按新行上的组合并按 Enter。
否则,您必须设置条件,例如该行是否为空白。您必须按 Enter 才能输入空白行才能退出。
StringBuilder strBuilder = new StringBuilder();
String line;
// for the last line to "end",I have to do \n! ... but how...?
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while((line = br.readLine()) != null && !line.isBlank()) {
System.out.println(line);
strBuilder.append(line);
}
// Does not reach code
System.out.println("Printing result:" + strBuilder.toString());
输出:
1 first line
2 second line
3 third line
4 fourth line1 first line
2 second line
3 third line
4 fourth line
Printing result:1 first line2 second line3 third line4 fourth line
,
因此,为了解决这个问题,我认为这可能是一个有问题的评估。下面的代码按预期工作,正如你们所有人所说,代码工作正常。无需对此进行进一步调查!
public static void main(String[] args) throws IOException {
StringBuilder strBuilder = new StringBuilder();
BufferedReader readFile;
try {
readFile = new BufferedReader(new FileReader("/src/z_hackerRank_problems/z_IOfile.txt"));
String contentLine;
while ((contentLine = readFile.readLine()) != null) {
strBuilder.append(contentLine).append(" ");
}
} catch (IOException ioException) {
ioException.printStackTrace();
}
printHistogram(strBuilder.toString());
}
// z_IOfile.txt | notice '4 fourth line',no line breaks,no "\n" but code still iterates through
1 first line
2 second line
3 third line
4 fourth line
使用 FileReader,效果很好。使用 InputStreamReader(System.in) ... 没那么多!
TLDR;
-
代码应该读取所有行,但是使用
InputStreamReader(System.in)
,如果没有 "\n" | 它不能识别行尾字符/序列"\r" | 执行停止循环的命令。 -
如本主题所述,HackerRank 评估可能需要进行一些修订,因为它可能存在问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。