表示数值的字符串
题目
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、“1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是。
思路
具体思路参考剑指offer,需要将数字总结出规律,(A.B E/e A),按顺序进行判断,(A代表有符号整数,B代表无符号整数)
另一种思路:借助几个flag从头到尾遍历,leetcode 65. Valid Number
测试用例
- 功能测试(正负数、含整数与不含整数部分、含小数与不含、含与不含指数部分;不匹配情况)
- 特殊测试(null、空字符串)
java代码
1 | public class NumericStrings{ |
总结
- 对字符串进行依次判断时,定义一个boolean变量,每判断一部分就进行更新,最终改变量即为判断结果,不需要进行循环判断。
- if (isNumeric && index[0] == str.length) 判断index是否到达结尾处了。
- isNumeric = isUnsignedInteger(str, index) || isNumeric; 顺序不能反了,否则当isNumeric为true时,不会判断后半部分,index就不会走向’e’,从而导致错误。