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

Java使用Scanner读取文本文件如何跳过非整数仅读取0-100范围整数

Java读取文本整数统计功能修复方案

问题根因

  • 原代码使用的skip()正则[a-zA-Z]*仅能匹配大小写字母,无法覆盖空格、标点、特殊符号等其他非整数内容,遇到这类字符后调用nextInt()会直接抛出InputMismatchException导致程序终止
  • 没有做「下一个读取单元是否为整数」的前置校验,直接读取整数是崩溃的核心原因

修复逻辑

放弃自行写正则过滤非整数的方案,直接使用Scanner内置的hasNextInt()方法做前置判断:如果下一个单元是整数则读取处理,否则直接跳过该单元,兼容所有非整数场景。

修复后完整代码

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ScoreStat {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner input = new Scanner(System.in);
        // 输入文件名
        System.out.print("Input File's name: " );
        String inputFile = input.nextLine();
        input.close();
        
        File file = new File(inputFile);
        Scanner scanFile = new Scanner(file);
        
        // 统计变量初始化
        int sum = 0;
        int totalCount = 0;
        int gradeACount = 0;
        int minimumScore = 101; // 满分100,初始值设为超过最大值
        int maximumScore = -1; // 最低分0,初始值设为低于最小值
        float average = 0f;
        float percentage = 0f;

        while(scanFile.hasNext()) {
            if(scanFile.hasNextInt()) {
                int num = scanFile.nextInt();
                if(num >= 0 && num <= 100) {
                    sum += num;
                    totalCount++;
                    
                    if(num >= 90) {
                        gradeACount++;
                    }
                    
                    if(num < minimumScore) {
                        minimumScore = num;
                    }
                    if(num > maximumScore) {
                        maximumScore = num;
                    }
                }
            } else {
                // 非整数内容直接跳过
                scanFile.next();
            }
        }
        scanFile.close();
        
        // 循环结束后统一计算结果
        if(totalCount > 0) {
            average = sum / (float)totalCount;
            percentage = (gradeACount / (float)totalCount) * 100;
            // 输出结果
            System.out.println("0~100范围内整数总数:" + totalCount);
            System.out.println("平均值:" + average);
            System.out.println("90分以上占比:" + percentage + "%");
            System.out.println("最小值:" + minimumScore);
            System.out.println("最大值:" + maximumScore);
        } else {
            System.out.println("文件中未找到0~100范围内的有效整数");
        }
    }
}

额外优化点

  • 把平均值、占比的计算挪到循环结束后执行,避免重复计算提升效率
  • 增加了有效整数为空的边界判断,避免除以0报错
  • 修正了最值初始值设置逻辑,避免初始值不合理导致统计错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:36:01