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

如何自动获取输入字符(含换行/回车)的ASCII值?

解决Java中无法获取换行/回车键ASCII值的问题

嗨,我明白你的困扰——用Scanner的nextLine()确实拿不到换行字符的ASCII值,这是因为这个方法本身的特性导致的,我来给你拆解下问题和解决方案:

问题根源

你当前用的scan.nextLine().charAt(0),nextLine()的逻辑是读取到换行符(\n)为止,然后丢弃这个换行符,返回前面的内容。所以当你单独输入回车键时,nextLine()返回的是空字符串,调用charAt(0)还会抛出StringIndexOutOfBoundsException,更别说获取换行符的ASCII了。你之前手动判断letter == ' '之所以无效,也是因为根本没拿到这个字符。

解决方案:用System.in.read()直接读取字节

要获取包括换行、回车在内的所有控制字符,直接用System.in的read()方法更合适,它会读取输入流中的每一个字节(对应ASCII值),包括换行(ASCII 10)、回车(ASCII 13)这些:

import java.io.IOException;

public class AsciiReader {
    public static void main(String[] args) {
        try {
            // 读取单个字符的ASCII值
            int ascii = System.in.read();
            System.out.println(ascii);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码说明

  • System.in.read()会返回输入字符的ASCII值(int类型),不需要再强制转换
  • 当你按下回车键时,不同操作系统的输入可能不同:Windows是回车(\r, ASCII 13) + 换行(\n, ASCII 10),Linux/macOS是直接换行(\n, ASCII 10),这个方法会依次读取这些字符
  • 需要处理IOException,因为输入流可能出现异常

如果你还是想用Scanner怎么办?

如果你坚持要用Scanner,可以修改为读取单个字节,但不如System.in.read()直接:

import java.util.Scanner;

public class ScannerAsciiReader {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 读取单个字节
        int ascii = scan.nextByte();
        System.out.println(ascii);
        scan.close();
    }
}

不过这个方法需要输入字符的十进制ASCII值,不太符合你“自动读取输入字符”的需求,所以更推荐第一种方案。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:01:32