如何自动获取输入字符(含换行/回车)的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
相关产品推荐
相关产品推荐

