Java 中的有效数字问题

2025 年 1 月 6 日 | 阅读 2 分钟

“有效数字”问题涉及确定给定的字符串是否表示有效的数值。这是软件开发中的一个常见问题,尤其是在解析应该表示数字的输入数据时。

问题陈述

给定一个字符串 s,确定它是否表示一个有效的数字。有效数字包括整数、浮点数和科学计数法。有效数字的示例是

  • "0"
  • "0.1"
  • "-3.14"
  • "2e10"
  • "-2.3E-10"
  • "+6.78"

无效数字的示例

  • "abc"
  • "1a"
  • "1e"
  • "e3"
  • "99e2.5"

方法

要解决此问题,我们需要检查给定的字符串是否符合有效数字的规则。规则如下:

  1. 字符串可以以符号(+ 或 -)开头。
  2. 字符串可以包含数字。
  3. 字符串可以包含小数点。
  4. 字符串可以包含指数部分,由 e 或 E 表示,后跟一个可选的符号和数字。

我们可以使用有限状态机 (FSM) 或正则表达式来验证字符串。在本节中,我们将为了简单起见使用正则表达式。

文件名:ValidNumber.java

解释

正则表达式 ^[+-]?((\d+(\.\d*)?)|(\.\d+))(e[+-]?\d+)?$ 用于根据特定规则匹配有效数字:^[+-]? 匹配开头的可选符号,(\d+(\.\d*)?)|(\.\d+) 匹配带可选小数点的数字或后跟数字的小数点,以及 (e[+-]?\d+)?$ 匹配由 e 或 E、可选符号和数字组成的选填指数部分。

isValidNumber() 方法首先检查输入字符串是否为 null 或为空,然后对其进行修剪,并使用正则表达式验证修剪后的字符串,如果匹配则返回 true,否则返回 false。main() 方法通过各种测试用例演示了 isValidNumber() 的用法,并打印出每个字符串是否表示有效数字。