如何将数组中每3个元素分组,创建对应的CityRow对象?
问题分析与解决方案
原代码的核心问题
- Scanner使用错误:
useDelimiter(",")被放在循环内部,且nextLine()会忽略分隔符读取整行,导致数据拆分逻辑完全混乱。 - 数据处理污染:调用
list.toString()后,字符串会包含[]和空格(例如[name1, id1, pop1, name2...]),split后会得到[name1这类脏数据,无法直接使用。 - 循环逻辑错误:三层嵌套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
相关产品推荐
相关产品推荐

