[英]Java | InputStreamReader(System.in) – it is not reading last line
一直在尝试解决这个问题。 长话短说,它没有读取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
之后没有换行符,所以我尝试使用.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
你会得到这个
如果您在控制台中按ENTER
(因为您输入的是 "\n" ),您将得到4 fourth line
打印出来,但这不是我所期望的。
目前,它不会终止。 它不会读取用户输入的最后一行。 它将处于一个循环中。
请帮忙:)
readline()
将读取输入直到换行符或文件结尾(以先到者为准)。
如果你做得正确,即你 pipe 你的文件到你的 java 程序的标准输入,它应该工作。 像这样: cat myfile.txt | java MyClass
cat myfile.txt | java MyClass
或java MyClass < myfile.txt
。 如果您使用FileInputStream
代替System.in
,它也将起作用。
问题仅在于您手动从控制台输入输入时。 在这种情况下, BufferedReader
无法知道您的输入何时完成,因此它会一直等到换行符或文件结尾。 在 Linux 中,您可以简单地按Ctrl-D
要求控制台关闭 java 程序的标准输入。
在 eclipse 中粘贴输入,然后单击其他窗格/窗口,然后单击控制台并按CTRL
+ Z
将其作为 null 行并退出
在 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());
Output:
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
所以把它放在 rest 上,我相信这可能是一个错误的评估。 下面的代码按预期工作,正如你们所有人所说,代码工作正常。 无需对此进行进一步调查!
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 评估可能需要进行一些修改,因为它可能是一个错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.