Java实现多行批量输入并添加行号,空输入退出,求代码调整
解决Java命令行多行输入并添加行号的问题
嘿,我来帮你理清这个问题!你想要在Java命令行里处理多行输入,每行加上the line number is :标识,输入空行就退出对吧?刚好可以帮你对比下BufferedReader和Scanner的用法,给你最适合的解决方案~
首选方案:用BufferedReader实现
BufferedReader是处理字符输入流的利器,读取整行文本的效率很高,特别适合多行输入的场景。这里给你写好完整的可运行代码,还做了资源自动关闭的优化:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class MultiLineInputHandler { public static void main(String[] args) throws IOException { // 用try-with-resources自动关闭资源,不用手动写close() try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) { String inputLine; int lineCount = 1; System.out.println("请输入多行文本(输入空行即可退出程序):"); // 循环读取每一行,直到输入流结束或空行 while ((inputLine = reader.readLine()) != null) { // 检测到空行就退出循环 if (inputLine.isEmpty()) { break; } // 按要求格式化输出 System.out.printf("the line number is : %d -> %s%n", lineCount, inputLine); lineCount++; } } System.out.println("程序已退出"); } }
代码关键说明:
BufferedReader.readLine():每次读取控制台的一整行内容,返回null表示输入流结束(比如按Ctrl+D/Unix或Ctrl+Z/Windows)。try-with-resources:Java 7+的特性,会自动关闭实现了AutoCloseable的资源,避免手动关闭时可能出现的遗漏。- 空行判断:用
inputLine.isEmpty()检测用户是否输入了空行,满足条件就退出循环。
用Scanner实现的备选方案
如果你更习惯用Scanner,也可以实现需求,但需要注意设置正确的分隔符,让它按行读取:
import java.util.Scanner; public class MultiLineScannerDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 设置分隔符为换行符,确保nextLine()读取完整的一行 scanner.useDelimiter("\n"); int lineCount = 1; System.out.println("请输入多行文本(输入空行即可退出程序):"); while (scanner.hasNextLine()) { String inputLine = scanner.nextLine(); if (inputLine.isEmpty()) { break; } System.out.printf("the line number is : %d -> %s%n", lineCount, inputLine); lineCount++; } scanner.close(); System.out.println("程序已退出"); } }
两种工具的对比:
- BufferedReader:属于IO流体系,读取文本的效率更高,适合纯文本行的批量读取,代码更简洁直接。
- Scanner:更擅长解析输入(比如读取整数、浮点数等结构化数据),但处理纯文本行时需要额外设置分隔符,效率略低于BufferedReader。
所以如果你的需求只是读取多行文本并添加行号,优先选BufferedReader的方案就好啦~
内容的提问来源于stack exchange,提问作者Matthew Lee
相关产品推荐
相关产品推荐

