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

如何将数组中每3个元素分组,创建对应的CityRow对象?

问题分析与解决方案

原代码的核心问题

  1. Scanner使用错误:useDelimiter(",")被放在循环内部,且nextLine()会忽略分隔符读取整行,导致数据拆分逻辑完全混乱。
  2. 数据处理污染:调用list.toString()后,字符串会包含[]和空格(例如[name1, id1, pop1, name2...]),split后会得到[name1这类脏数据,无法直接使用。
  3. 循环逻辑错误:三层嵌套for循环会生成所有name、id、population的无效组合,而非按顺序每3个元素对应一组。

正确实现方式

第一步:正确读取并拆分数据

先将输入的所有元素拆分为干净的字符串数组,每个元素对应名称、ID、人口的其中一项:

Scanner scanner = new Scanner(System.in);
scanner.useDelimiter(","); // 提前设置分隔符
List<String> elements = new ArrayList<>();
while (scanner.hasNext()) {
    String element = scanner.next().trim(); // 读取单个元素并去除前后空格
    elements.add(element);
}
scanner.close();

// 转成数组(也可直接用List遍历)
String[] dataArray = elements.toArray(new String[0]);

第二步:按每3个元素一组创建CityRow

遍历数组,每次步进3位,取当前索引元素为名称、索引+1为ID、索引+2为人口,对应创建对象:

List<CityRow> cityRows = new ArrayList<>();
// 校验数据完整性,避免数组越界
if (dataArray.length % 3 != 0) {
    throw new IllegalArgumentException("数据格式错误,元素总数不是3的倍数");
}

for (int i = 0; i < dataArray.length; i += 3) {
    String name = dataArray[i];
    String id = dataArray[i + 1];
    String population = dataArray[i + 2];
    
    // 创建CityRow对象并加入列表
    CityRow cityRow = new CityRow(name, id, population);
    cityRows.add(cityRow);
    
    // 调试输出(可按需保留)
    System.out.println("name is " + name);
    System.out.println("id is " + id);
    System.out.println("population is " + population);
}

补充场景适配

如果你的输入是每行一组数据(例如每行格式为name,id,population),可直接按行读取拆分:

Scanner scanner = new Scanner(System.in);
List<CityRow> cityRows = new ArrayList<>();
while (scanner.hasNextLine()) {
    String line = scanner.nextLine().trim();
    if (line.isEmpty()) continue;
    String[] parts = line.split(",");
    if (parts.length != 3) {
        throw new IllegalArgumentException("行数据格式错误:" + line);
    }
    CityRow cityRow = new CityRow(parts[0].trim(), parts[1].trim(), parts[2].trim());
    cityRows.add(cityRow);
}
scanner.close();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:50:25