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

使用Scanner.nextLine()读取字符串失败的技术求助

问题分析与解决

问题根源

scan.nextInt()和scan.nextDouble()仅读取对应类型的数值,不会处理输入时按下的换行符,这个换行符会留在输入缓冲区中。后续调用scan.nextLine()时,会直接读取这个残留的换行符,导致字符串变量s为空,最终输出看不到预期的字符串内容。

解决方案

方法一:处理残留换行符(推荐,支持带空格的完整字符串)

在读取double后,额外调用一次scan.nextLine()来吃掉残留的换行符,再读取目标字符串:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        int i = scan.nextInt();
        double d = scan.nextDouble();
        scan.nextLine(); // 清除double输入后残留的换行符
        String s = scan.nextLine();

        scan.close();
        
        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);

    }
}

方法二:使用next()读取字符串(仅适用于无空格的字符串)

如果你的字符串输入不包含空格,可以直接用scan.next()替代scan.nextLine(),它会自动跳过前面的空白字符(包括换行符):

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        int i = scan.nextInt();
        double d = scan.nextDouble();
        String s = scan.next(); // 仅读取无空格的字符串

        scan.close();
        
        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);

    }
}

注意事项

  • 若需要读取包含空格、制表符的完整一行文本,必须使用方法一,否则next()会在遇到第一个空格时停止读取。
  • 输入时确保按顺序输入整数、浮点数、字符串,每输入一项后按回车即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:50:27