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; }
输入校验与解析完整实现
覆盖所有要求的校验规则:
- 拦截含小数点的非法输入
- 校验
x y/z格式合法性,支持多空格分隔 - 支持负数输入,自动处理分母负号
- 校验分母不为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
相关产品推荐
相关产品推荐

