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

在IntelliJ(Windows10)中Scanner类为何先返回\n而非\r?

为什么Windows下IntelliJ中Java代码输入Enter输出10而非13?

问题场景

在Windows 10系统的IntelliJ中运行以下Java代码:

import java.util.Scanner;
public class Main
{
    public static void main(String ... args)
    {
        Scanner reader = new Scanner(System.in);
        reader.useDelimiter("");
        String s = reader.next();
        System.out.println((int)s.charAt(0));
    }
}

按下Enter键作为输入时,输出为:

10

按道理Windows的换行符是\r\n(对应ASCII码13和10),为什么输出不是13?

原因解析

这是因为IntelliJ的控制台做了换行符归一化处理:

  • 不管你在Windows系统下输入回车产生的\r\n,还是其他系统的换行符,IntelliJ都会自动转换成跨平台通用的\n(ASCII码10),以此保证代码在不同平台下的行为一致性。
  • 你的代码通过reader.useDelimiter("")让Scanner每次读取单个字符,但此时控制台已经把\r\n转换成了\n,所以读到的第一个字符就是\n,输出自然是10。

验证原生换行符的方法

如果想看到Windows原生的\r(ASCII码13),可以跳过IntelliJ控制台,直接在**命令提示符(CMD)**中运行编译后的.class文件,此时输入回车,就能读到\r,输出13。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:27:37