Java中的逗号分隔用户输入

xam8gpfp  于 2023-02-07  发布在  Java
关注(0)|答案(2)|浏览(177)

以下是输入:活动名称、日期、参加人数
餐饮聚会,2018年1月1日,100
婚礼,2018年1月24日,500
自行车特技表演,06/01/2018,300
下面是代码:

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个1月1次
餐饮聚会,2018年1月1日,100
缔约方2018年1月1日100
婚礼,2018年1月24日,500
24/01/2018 500线程"main"中出现异常java. lang. ArrayIndex超出边界2在主服务器上。主服务器(Main.java:74)
我已经尝试了字符串令牌化器和拆分方法,但正如你所看到的错误,我不能采取正确的格式输入。请帮助我知道什么是错误的,在我的代码。

gwbalxhn

gwbalxhn1#

您可能已经注意到,从调试日志中,即使在IndexOutOfBoundsException之前,您也没有得到正确的输出,这是由于您在for循环开始时添加了sc.next();,这也是第二次迭代中出现异常的原因。

到底发生了什么

编译器通过sc.nextInt();读取第一个非空格分隔的整数字符,然后,在for循环中,通过sc.next();读取下一个非空格分隔的字符串,在你的例子中,就是单词"Catering"。
在这之后,编译器会读取行的其余部分作为"party,01/01/2018,100"并对其进行操作,这就是为什么在sysout中只会得到单词"party"而不是"Catering party"。
下一行输入也是如此,只是这次整个"Wedding"被认为是一个sc.next(),所以最终得到的是"24/01/2018,500"和一个IndexOutOfBoundsException
第一行起作用的唯一原因是它的第一个参数中有两个单词,所以它不影响拆分数组的大小。

溶液

我建议你在阅读下一部分之前尝试自己修复它。考虑使用调试器!这是一个非常有用的工具。
在读取初始数字输入sc.nextInt()之后,您应该添加sc.nextLine();,以便编译器理解前一行已经完成,并且下一次读取应该在新的行上。
您应该删除sc.next();,因为这没有任何作用(我猜您添加此内容是为了尝试解决编译器无法读取下一行的问题,如前所述)。
最后,我建议您在,上拆分,而不是在,上拆分,因为您无论如何都要修剪字符串。

q8l4jmvw

q8l4jmvw2#

在拆分输入之前,请尝试删除白色,以确保没有空格会影响分隔符,此外,您还必须检查用户是否输入了以逗号分隔的三个字段。以下是一个示例:

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().trim().split(",");
    if (parts.length != 3) {
      throw new IllegalArgumentException("Error: Input must have 3 parts separated by comma");
    }
    String name = parts[0];
    String date = parts[1];
    String attendee = parts[2];
    int count = Integer.parseInt(attendee);
    events.add(new Event(name, date, count));
  }
}

相关问题