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

如何使用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());
        }
    }
}

关键步骤说明

  1. 读取整行数据:用reader.nextLine()代替nextInt(),避免因数据是浮点数导致的类型错误,同时一次性获取所有数据。
  2. 分割数据:split("\\s+")是核心:
    • \\s匹配任意空白字符(空格、制表符等)
    • +表示匹配一个或多个空白字符,这样不管数据之间是单个空格还是多个空格,都能正确分割成独立的元素。
  3. 确定数组大小:因为数据是成绩+姓名成对出现,所以学生总数等于分割后数组长度的一半(dataParts.length / 2)。
  4. 填充数组:通过循环遍历,用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:25