From 593637c40020bea8feec5f6559d88293728e8dad Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Fri, 30 Oct 2026 20:18:00 +0800 Subject: [PATCH] =?UTF-8?q?Update=2020.=20=E8=A1=A8=E7=A4=BA=E6=95=B0?= =?UTF-8?q?=E5=80=BC=E7=9A=84=E5=AD=97=E7=AC=A6=E4=B8=B2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补充题目描述,补充数值组成规则分析与正则表达式各分段的对应说明。 --- notes/20. 表示数值的字符串.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/notes/20. 表示数值的字符串.md b/notes/20. 表示数值的字符串.md index 1d331aee..1f831dde 100644 --- a/notes/20. 表示数值的字符串.md +++ b/notes/20. 表示数值的字符串.md @@ -4,6 +4,8 @@ ## 题目描述 +判断一个字符串是否表示数值(包括整数和小数)。 + ```text true @@ -27,7 +29,13 @@ false ## 解题思路 -使用正则表达式进行匹配。 +按 LeetCode 题面,一个数值由三部分依次组成,首尾可以有空格: + +- 可选的符号 '+' 或 '-'; +- 小数或整数:至少一位数字,后面可以跟 '.' 和若干位数字(例如 "1."、"3.14"),或者 '.' 后面跟至少一位数字(例如 ".5"); +- 可选的指数:'e' 或 'E',后面跟可选的符号和至少一位整数,指数不能是小数。 + +例如 "-1.5e+3" 拆成 "-"、"1.5"、"e+3" 三部分。每部分直接对应正则表达式中的一段,用到的语法如下: ```text [] : 字符集合 @@ -40,6 +48,8 @@ false \\d : 数字 ``` +符号部分对应 `[+-]?`,数字部分对应 `(\\d+(\\.\\d*)?|\\.\\d+)`,指数部分对应 `([eE][+-]?\\d+)?`,首尾的空格用 trim() 去掉: + ```java public boolean validNumber(String s) { if (s == null || s.length() == 0)