如何使用Java Split方法处理学生成绩数据并转换为数组?
如何用Java的split方法将交替的成绩/姓名数据转换为数组
首先,你的原代码里有个小问题:reader.nextInt()会尝试读取整数,但数据开头是3.3(浮点数),这会导致输入不匹配异常。我们需要先读取整行数据,再用split()分割,然后分别填充成绩和姓名数组。
完整解决方案代码
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class StudentGradeProcessor { public static void main(String[] args) { try { File gradeFile = new File("data.txt"); Scanner reader = new Scanner(gradeFile); // 读取整行数据(假设所有数据在同一行) String fullDataLine = reader.nextLine(); // 用任意数量的空白字符分割数据(支持单个/多个空格、制表符) String[] dataParts = fullDataLine.split("\\s+"); // 每两个元素对应一个学生的成绩+姓名,所以学生数量是数组长度的一半 int studentCount = dataParts.length / 2; // 初始化存储成绩和姓名的数组(如果需要数值运算,推荐用double[]存成绩) String[] gradeArr = new String[studentCount]; String[] nameArr = new String[studentCount]; // 遍历分割后的数组,填充两个目标数组 for (int i = 0; i < studentCount; i++) { // 偶数索引位置是成绩(0, 2, 4...) gradeArr[i] = dataParts[2 * i]; // 奇数索引位置是姓名(1, 3, 5...) nameArr[i] = dataParts[2 * i + 1]; } // 验证输出 System.out.println("处理后的学生数据:"); for (int i = 0; i < studentCount; i++) { System.out.printf("%s: %s%n", nameArr[i], gradeArr[i]); } reader.close(); } catch (FileNotFoundException e) { System.err.println("无法找到文件:" + e.getMessage()); } } }
关键步骤说明
- 读取整行数据:用
reader.nextLine()代替nextInt(),避免因数据是浮点数导致的类型错误,同时一次性获取所有数据。 - 分割数据:
split("\\s+")是核心:\\s匹配任意空白字符(空格、制表符等)+表示匹配一个或多个空白字符,这样不管数据之间是单个空格还是多个空格,都能正确分割成独立的元素。
- 确定数组大小:因为数据是
成绩+姓名成对出现,所以学生总数等于分割后数组长度的一半(dataParts.length / 2)。 - 填充数组:通过循环遍历,用
2*i获取成绩元素,2*i+1获取对应姓名元素,分别存入两个数组。
进阶优化:存储数值类型成绩
如果后续需要对成绩进行计算(比如求平均分),可以把gradeArr改成double[]类型,转换时用Double.parseDouble():
// 替换原有的String[] gradeArr声明 double[] gradeArr = new double[studentCount]; // 填充时转换为double gradeArr[i] = Double.parseDouble(dataParts[2 * i]);
内容的提问来源于stack exchange,提问作者Mark Yo
相关产品推荐
相关产品推荐

