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

Java如何检测用户输入是否为合法分数及字符串首尾是否为数字

现有代码错误原因

String.startsWith() 和 String.endsWith() 方法仅支持固定字符串匹配,不识别正则表达式语法。你传入的"[0-9].*"会被当作普通字符串处理,代码会判断输入是否真的以[0-9].*这6个字符开头,完全不符合你的预期。

实现方案

有两种常用实现方式,推荐直接用正则全量匹配分数格式,逻辑更简洁:

方案1:正则全量匹配(推荐)

你需要的分数格式是「数字开头、包含/、数字结尾」,直接用正则\\d+/\\d+即可覆盖需求:

  • \\d+ 匹配1位及以上数字
  • 中间的/匹配分数分隔符
  • String.matches()方法默认要求全串匹配,天然保证开头是数字、结尾是数字

方案2:单独判断首尾字符

如果不需要校验整体格式,只判断首尾是否为数字,可以用Character类的方法:

// 先做非空判断避免下标越界、空指针异常
if (aa != null && aa.length() > 0 
    && Character.isDigit(aa.charAt(0)) 
    && Character.isDigit(aa.charAt(aa.length() - 1))) {
    // 符合首尾为数字的要求
}

修正后完整代码

if (nm == 2) {
    System.out.print("First Fraction: ");
    aa = sc.nextLine().trim(); // 去除首尾多余空格,兼容用户误输入
    System.out.print("Second Fraction: ");
    bb = sc.nextLine().trim();

    // 分数校验规则,需要支持负分数可改为 "-?\\d+/\\d+"
    String fractionRule = "\\d+/\\d+";
    if (aa.matches(fractionRule) && bb.matches(fractionRule)) {
        ar = new Arithmetic_Operations(aa, bb);
        Arithmetic_Operations.Add(); // 建议把Add()移到此处,避免校验失败后仍执行逻辑
    } else {
        System.out.println("Please Input Fraction");
        System.out.println();
        break;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:27:01