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

Java实现分数格式字符串转整数及输入校验功能

改进后的字符串转int方法

该实现新增负数支持、非法字符校验能力,完全不依赖JDK自带的整数转换方法:

public static int stringToInt(String s) throws IllegalArgumentException {
    if (s == null || s.isEmpty()) {
        throw new IllegalArgumentException("数字字符串不能为空");
    }
    int sign = 1;
    int start = 0;
    // 处理负号
    if (s.charAt(0) == '-') {
        sign = -1;
        start = 1;
        if (s.length() == 1) {
            throw new IllegalArgumentException("仅含负号无数字内容");
        }
    }
    int result = 0;
    for (int i = start; i < s.length(); i++) {
        char c = s.charAt(i);
        // 校验是否为数字,拦截小数点、字母等非法字符
        if (c < '0' || c > '9') {
            throw new IllegalArgumentException("非法数字字符: " + c);
        }
        result = result * 10 + (c - '0');
    }
    return result * sign;
}

输入校验与解析完整实现

覆盖所有要求的校验规则:

  1. 拦截含小数点的非法输入
  2. 校验x y/z格式合法性,支持多空格分隔
  3. 支持负数输入,自动处理分母负号
  4. 校验分母不为0
import java.util.Scanner;

public class FractionInputHandler {
    // 上面实现的stringToInt方法放这里
    public static int stringToInt(String s) throws IllegalArgumentException {
        if (s == null || s.isEmpty()) {
            throw new IllegalArgumentException("数字字符串不能为空");
        }
        int sign = 1;
        int start = 0;
        if (s.charAt(0) == '-') {
            sign = -1;
            start = 1;
            if (s.length() == 1) {
                throw new IllegalArgumentException("仅含负号无数字内容");
            }
        }
        int result = 0;
        for (int i = start; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c < '0' || c > '9') {
                throw new IllegalArgumentException("非法数字字符: " + c);
            }
            result = result * 10 + (c - '0');
        }
        return result * sign;
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Fraction fraction = new Fraction(); // 你的分数类实例
        try {
            System.out.println("请输入分数,格式为 x y/z:");
            String inputStr = input.nextLine().trim();
            // 拦截小数输入
            if (inputStr.contains(".")) {
                throw new IllegalArgumentException("不允许输入小数");
            }
            // 按空格分割,兼容多空格场景
            String[] parts = inputStr.split("\\s+");
            if (parts.length != 2) {
                throw new IllegalArgumentException("输入格式错误,必须为 x y/z 格式");
            }
            // 分割分子分母
            String[] fractionParts = parts[1].split("/");
            if (fractionParts.length != 2) {
                throw new IllegalArgumentException("分数部分格式错误,必须为 y/z 格式");
            }
            // 转换三个部分为整数
            int wholeNumber = stringToInt(parts[0]);
            int numerator = stringToInt(fractionParts[0]);
            int denominator = stringToInt(fractionParts[1]);
            // 校验分母不为0
            if (denominator == 0) {
                throw new IllegalArgumentException("分母不能为0");
            }
            // 处理分母为负的情况,统一把负号移到分子
            if (denominator < 0) {
                numerator = -numerator;
                denominator = -denominator;
            }
            // 调用原有分数设置逻辑
            if (wholeNumber == 0) {
                fraction.setWholeFraction(numerator, denominator);
            } else {
                fraction.setMixedNumber(wholeNumber, numerator, denominator);
            }
            System.out.println("分数输入成功");
        } catch (IllegalArgumentException e) {
            System.out.println("输入错误:" + e.getMessage());
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:02