剑指offer——表示数值的字符串
问题描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
思路分析
-
表示数值的字符串模式:A[.[B]] [e|EC],其中A为数值的整数部分。B小数点后的小数部分,C是指数部分的数值 。"e"和"E"都代表指数。
-
A、C可以有符号,B不能有。
[\\ + -]? [0-9] * ( \\.[0-9] *) ? ([eE][\\+ -]?[0-9]+)? --------|------|----------------|-------|-------|------- A的符号 A B 指数部分 C的符号 C
正则表达式菜鸟教程:http://www.runoob.com/regexp/regexp-syntax.html
详细参照正则表达式用法。
代码
public class Solution {
public boolean isNumeric(char[] str) {
String string = String.valueOf(str);
return string.matches("[\\+-]?[0-9]*(\\.[0-9]*)?([eE][\\+-]?[0-9]+)?");
}
}