一、题目描述本次编程练习要求使用Scanner类解析字符串 “数学 87 分物理 76 分英语 96 分”从中提取三科成绩数据并计算出总成绩与平均成绩最终输出结果。二、解题思路核心问题分析题目给出的字符串中混合了中文、数字和标点符号直接截取或分割会比较麻烦。核心需求是从混杂文本中精准提取出三个整数成绩。技术选型选择使用Scanner类的useDelimiter()方法通过正则表达式设置分隔符一次性过滤掉所有非数字字符直接读取分数。步骤拆解定义原始成绩字符串。创建Scanner对象并设置分隔符为 “非数字字符”。依次读取三科成绩并保存到变量中。计算总成绩和平均成绩。输出各科成绩、总成绩和平均成绩。三、完整代码四、代码逐段解析导入类与定义类import java.util.Scanner;导入Scanner工具类用于文本解析。public class Score定义了程序的主类Score类名与文件名保持一致。主方法入口public static void main(String[] args)是 Java 程序的入口方法所有代码逻辑都写在这个方法内。定义原始字符串String Str 数学87分,物理76分,英语96分;定义了需要解析的原始成绩字符串。创建 Scanner 并设置分隔符Scanner sc new Scanner(Str).useDelimiter([^0-9]);创建Scanner对象并设置正则分隔符[^0-9]该表达式表示 “匹配一个或多个非数字字符”这样所有文字和标点都会被当作分隔符处理。提取成绩数据通过三次sc.nextInt()方法依次读取并存储数学、物理、英语三科的成绩到变量中。计算总成绩与平均分int total math physics english;计算三科成绩的总和。double average total / 3.0;计算平均成绩使用3.0而非3避免整数除法导致的精度丢失。输出结果使用System.out.println()输出各科成绩和总成绩使用System.out.printf()输出平均成绩确保输出格式清晰易读。关闭 Scannersc.close();关闭Scanner对象释放资源。五、心得体会这次编程练习让我对Scanner类的应用场景有了更深入的理解。之前我只知道Scanner可以用来读取控制台输入没想到它还能直接处理字符串通过自定义分隔符实现高效的文本解析这让我对 Java 工具类的灵活性有了新的认识。一开始我也考虑过用substring()手动截取字符串但需要反复计算每个数字的位置不仅代码繁琐而且一旦字符串格式有细微变化就会出错。而使用Scanner结合正则分隔符的方式代码变得简洁高效鲁棒性也更强只要字符串中包含数字就能正确提取不用再担心下标计算错误的问题。同时这次练习也让我注意到了浮点数除法的细节。一开始我不小心写成了total / 3结果平均成绩直接变成了整数丢失了小数部分。后来改成total / 3.0才得到了正确的浮点数结果这让我意识到 Java 中整数除法和浮点数除法的区别以后在处理数值计算时会更加注意精度问题。通过这道题我不仅掌握了Scanner解析字符串的技巧也体会到了正则表达式在文本处理中的强大作用为以后处理类似的混杂文本解析问题打下了基础。