You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java Scanner处理控制字符,实现回车触发与Ctrl+C退出?

Java实现回车键打印"ENTER"、Ctrl+C退出程序的方案

原代码存在的问题

  1. 回车键判断错误:sc.nextLine()在按下回车键时返回的是空字符串(""),而非"enter";且代码中用单引号包裹'enter'属于字符常量,与字符串比较会直接编译报错。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:13:18