CS-Notes全部笔记在阅读器中打开

20. 表示数值的字符串

Leetcode

题目描述

判断一个字符串是否表示数值(包括整数和小数)。

true

"+100"
"5e2"
"-123"
"3.1416"
"-1E-16"
false

"12e"
"1a3.14"
"1.2.3"
"+-5"
"12e+4.3"

解题思路

按 LeetCode 题面,一个数值由三部分依次组成,首尾可以有空格:

例如 "-1.5e+3" 拆成 "-"、"1.5"、"e+3" 三部分。每部分直接对应正则表达式中的一段,用到的语法如下:

[]  : 字符集合
()  : 分组
?   : 重复 0 ~ 1 次
+   : 重复 1 ~ n 次
*   : 重复 0 ~ n 次
.   : 任意字符
\\. : 转义后的 .
\\d : 数字

符号部分对应 [+-]?,数字部分对应 (\\d+(\\.\\d*)?|\\.\\d+),指数部分对应 ([eE][+-]?\\d+)?,首尾的空格用 trim() 去掉:

public boolean validNumber(String s) {
    if (s == null || s.length() == 0)
        return false;
    return s.trim().matches("[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?");
}

在阅读器中可以用目录和搜索、切换深色模式、练习这篇笔记中的面试题:打开《20. 表示数值的字符串》