You need to enable JavaScript to run this app. Java中如何用Scanner正确读取多词长字符串输入
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何用Scanner正确读取多词长字符串输入

Scanner读取带空格的多词输入的修正方案

问题根因

  • Scanner.next()的读取逻辑为:从当前位置开始,读到第一个空白字符(空格、换行、制表符等)就停止,仅返回前面的字符串内容。碰到包含空格的多词房间名时,天然会把整段输入按空格拆成多个独立读取单元,出现房间名错位的问题。
  • Scanner.nextInt()读取整数后,输入缓冲区会残留用户按下回车产生的换行符。如果直接把next()换成读整行的方法,第一行读取会直接拿到空字符串,触发新的输入错位问题。

具体修正步骤

  • 读取房间数量后,额外调用一次input.nextLine()消费掉缓冲区残留的换行符,清空输入状态。
  • 将循环内读取房间名的input.next()替换为input.nextLine(),该方法会完整读取用户按下回车前的所有输入内容,支持包含空格的长字符串。

修正后的完整可运行代码

import java.util.Scanner;

class Property {
    public static void main (String[] args) {
        Scanner input = new Scanner(System.in);
        String[] rooms = new String[15];

        System.out.println("How many rooms? ");
        int roomLimit = input.nextInt();
        // 消费nextInt()残留的换行符,避免后续读空行
        input.nextLine();

        for (int i = 0; i < roomLimit; i++) {
            System.out.println("Enter room name " + (i + 1));
            // 读取整行内容,完整支持带空格的多词房间名
            rooms[i] = input.nextLine();
        }

        // 对应原有逻辑的房间列表打印
        System.out.println("\nList of Chosen Rooms ");
        for (int i = 0; i < roomLimit; i++) {
            System.out.printf("Room %d: %s%n", i + 1, rooms[i]);
        }
        input.close();
    }
}

修正后的运行效果

How many rooms? 
4
Enter room name 1
Double Duluxe 
Enter room name 2
Single Bed
Enter room name 3
Couple Golden
Enter room name 4
Master Suite

List of Chosen Rooms 
Room 1: Double Duluxe
Room 2: Single Bed
Room 3: Couple Golden
Room 4: Master Suite

Process finished with exit code 0

避坑提示:如果跳过了消费残留换行的步骤,哪怕换成nextLine()也会出现输入错位——输入完房间数量按下回车后,程序会直接把空字符串作为第一个房间名,让后续所有房间的输入整体往前错位一位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 22:06:02