dea*_*els 21 java infinite-loop bufferedreader inputstreamreader
我想使用BufferedReader在控制台中输入多行文本,当我点击"Enter"以查找整个文本长度的总和时.问题是,我似乎进入了一个无限循环,当我按下"Enter"时,程序没有结束.我的代码如下:
InputStreamReader instream = new InputStreamReader(System.in);
BufferedReader buffer = new BufferedReader(instream);
line= buffer.readLine();
while (line!=null){
length = length + line.length();
line= buffer.readLine();
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我我做错了什么吗?
Rus*_*ang 66
使用Java 8的一行代码:
line = buffer.lines().collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)
Ell*_*sch 28
阅读所有行的惯用方法是while ((line = buffer.readLine()) != null).另外,我建议try-with-resources发表一个声明.就像是
try (InputStreamReader instream = new InputStreamReader(System.in);
BufferedReader buffer = new BufferedReader(instream)) {
long length = 0;
String line;
while ((line = buffer.readLine()) != null) {
length += line.length();
}
System.out.println("Read length: " + length);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
如果要在收到空行时结束循环,请在while循环中为该循环添加测试
while ((line = buffer.readLine()) != null) {
if (line.isEmpty()) {
break;
}
length += line.length();
}
Run Code Online (Sandbox Code Playgroud)
一个
break语句将控制从一个封闭的声明.
line当你按回车键时不会为空;它将是一个空字符串。
请注意BufferedReaderJavaDoc 的相关内容readLine():
读取一行文本。一行被视为以换行符 ('\n')、回车符 ('\r') 或回车符后紧跟换行符之一终止。
并readLine()返回:
包含行内容的字符串,不包括任何行终止字符,如果已到达流末尾,则返回 null
因此,当您按 [Enter] 时,您将给出BufferedReader一个仅包含\n、\r或 的新行\r\n。这意味着readLine()将返回一个空字符串。
所以尝试这样的事情:
InputStreamReader instream = new InputStreamReader(System.in);
BufferedReader buffer = new BufferedReader(instream);
line = buffer.readLine();
while( (line != null) && (!line.isEmpty()) ){
length = length + line.length();
line = buffer.readLine();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60738 次 |
| 最近记录: |