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

使用Scanner先读标题再读两个单词触发数组越界异常求助

解决Java中ArrayIndexOutOfBoundsException:1的问题

嘿,这个ArrayIndexOutOfBoundsException: 1我太熟了!本质就是你尝试访问数组的第2个元素(Java数组索引从0开始),但拆分后的数组根本没有这么多元素,大概率是Scanner读取逻辑的坑或者输入格式不符合预期导致的,我给你一步步拆解解决:

错误原因分析

你遇到的报错位置在MainSystem.addBook的第57行,也就是拆分导演输入后想取索引为1的元素时出错。常见的两个诱因:

  1. Scanner读取方式冲突:如果你先用next()读取标题(只会读到第一个空格就停止),输入缓冲区里会留下换行符,接下来用nextLine()读取导演信息时,会直接把这个换行符当成空字符串读入,拆分后数组长度为0,自然访问索引1就报错。
  2. 输入格式不符合要求:用户输入导演信息时只填了一个单词,没有用空格分隔名和姓,拆分后数组长度为1,同样会触发索引越界。

修正后的代码示例

我给你写一段规避这些问题的代码,包含输入校验和正确的Scanner读取逻辑:

import java.util.Scanner;

public class MainSystem {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 读取标题:用nextLine()读完整标题(支持带空格的标题)
        System.out.print("请输入标题:");
        String title = scanner.nextLine();

        // 读取导演名和姓氏
        System.out.print("请输入导演名和姓氏(空格分隔):");
        String directorInput = scanner.nextLine().trim(); // 去掉前后空格

        // 用\\s+匹配任意数量的空格(避免多个空格导致拆分出空元素)
        String[] directorParts = directorInput.split("\\s+");

        // 先校验输入格式
        if (directorParts.length < 2) {
            System.out.println("错误:请输入空格分隔的两个单词!");
            scanner.close();
            return;
        }

        // 安全获取导演名和姓氏
        String directorFirstName = directorParts[0];
        String directorLastName = directorParts[1];

        // 后续业务逻辑,比如调用addBook
        addBook(title, directorFirstName, directorLastName);
        scanner.close();
    }

    private static void addBook(String title, String directorFirstName, String directorLastName) {
        // 你的业务代码
        System.out.println("添加成功:标题=" + title + ",导演=" + directorFirstName + " " + directorLastName);
    }
}

关键注意事项

  • 统一用nextLine()读取:避免next()和nextLine()混用导致的缓冲区残留问题,这样能读取带空格的完整输入内容。
  • 输入校验不可少:在访问数组索引前,先判断数组长度,防止用户输入不符合要求的内容。
  • 灵活的拆分规则:用\\s+作为分隔符,能兼容用户输入多个空格的情况,同时用trim()去掉输入前后的无效空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:01:25