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
相关产品推荐
相关产品推荐

