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

Java读取逗号分隔输入时数组越界问题求助

原Scanner代码数组越界异常原因分析

输入示例

事件名称, 日期, 参会人数
Catering party, 01/01/2018, 100
Wedding,24/01/2018,500
Bike Stunts show, 06/01/2018, 300

原Scanner代码

public static void main(String[] args) throws ParseException {
  //SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  List<Event> events = new ArrayList<>();
  for (int i = 0; i < n; i++) {
    sc.next();
    //String line=sc.nextLine();
    String parts[] = sc.nextLine().split(", ");
    //StringTokenizer st = new StringTokenizer(line,", ");
    //int j=0;
    //while(st.hasMoreTokens()) {
    //System.out.println(st.nextToken());
    //parts[j]=st.nextToken();
    //j++;
    //}
    //System.out.println(j);
    //String[] inputs = sc.nextLine().split(", ");`
    for (String data : parts) {
      System.out.println(data);
    }
    String name = parts[0].trim();
    String date = parts[1].trim();
    String attendee = parts[2].trim();
    int count = Integer.parseInt(attendee);
    events.add(new Event(name, date, count));
  }
}

报错信息

3(输入数量)
Catering party, 01/01/2018, 100
party
01/01/2018
100
Wedding, 24/01/2018, 500
24/01/2018
500
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at Main.main(Main.java:74)

异常原因分析

  1. Scanner读取逻辑完全错误
    sc.next()方法默认以**空白字符(空格、换行、制表符)**作为分隔符,而你的输入中事件名称可能包含空格(如Catering party),且逗号与内容的空格格式不统一(有的有空格,有的没有)。这会导致sc.next()读取的内容完全不符合预期:

    • 第一次循环时,sc.next()读取Catering,剩下的 party, 01/01/2018, 100被sc.nextLine()获取,分割后得到3个元素,暂时能正常访问。
    • 第二次循环时,sc.next()读取Wedding,(因为没有空格分隔),sc.nextLine()只能获取24/01/2018, 500,用, 分割后仅得到2个元素,此时访问parts[2]必然触发数组越界异常。
  2. sc.nextInt()残留换行符的隐性影响
    调用sc.nextInt()读取输入数量3后,Scanner不会自动读取行尾的换行符\n,这个残留的换行符会留在输入缓冲区中。虽然第一次循环的sc.next()会跳过空白,但后续的拆分逻辑已经破坏了整行读取的可能性,进一步加剧了读取混乱。

为什么BufferedReader能正常工作

BufferedReader的readLine()方法会直接读取整行文本(自动丢弃换行符),确保每一条事件数据被完整获取。后续用split(",")分割(不依赖逗号后的空格),再对每个元素做trim()处理,就能稳定得到三个字段,不会出现数组长度不足的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:10:30