如何通过Java Scanner处理控制字符,实现回车触发与Ctrl+C退出?
Java实现回车键打印"ENTER"、Ctrl+C退出程序的方案
原代码存在的问题
- 回车键判断错误:
sc.nextLine()在按下回车键时返回的是空字符串(""),而非"enter";且代码中用单引号包裹'enter'属于字符常量,与字符串比较会直接编译报错。 - Ctrl+C处理错误:Ctrl+C是系统级中断信号,无法通过Scanner读取为输入内容,因此不能通过判断输入字符串来触发退出逻辑。
正确实现代码
package project; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 注册关闭钩子,处理Ctrl+C触发的程序中断 Runtime.getRuntime().addShutdownHook(new Thread(() -> { System.out.println("\n程序已退出"); sc.close(); })); try { while (true) { String input = sc.nextLine(); // 按下回车键时,input为空字符串,打印"ENTER" if (input.isEmpty()) { System.out.println("ENTER"); } // 如需打印其他输入内容,可取消下方注释 // System.out.println(input); } } catch (IllegalStateException e) { // Scanner被关闭时触发的异常,无需额外处理 } } }
代码说明
- 回车键处理:当按下回车键时,
sc.nextLine()会读取到空字符串,通过input.isEmpty()判断后打印"ENTER"。 - Ctrl+C处理:通过
Runtime.addShutdownHook()注册关闭钩子,当按下Ctrl+C时,JVM会触发该钩子线程,执行关闭Scanner和提示退出的逻辑。
内容的提问来源于stack exchange,提问作者user21395038
相关产品推荐
相关产品推荐

