请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
这题用ifelse去挨个判断情况也能做出来,但是我看题解别人挺多使用正则表达式的,正好之前学爬虫学过,这里试试java的正则匹配:
用的是String.matches()方法
[-+]?表示正负号出现其中一个就可以,?表示出现次数0或1,意思是有正负号其中一个也行,没有也行。
第一个括号就是分别对整数,小数的匹配,|符号就是||的作用吧。
第二个括号里面是对科学计数法的匹配,[eE]后边不加?是因为科学计数法必须出现其中一个,然后在这个括号后边的?表示在整个匹配字符串里面,你科学计数法的方式可以出现也可以不出现。
public class Solution {
public boolean isNumeric(char[] str) {
String pattern = "^[-+]?(\\d+|\\d*\\.\\d+|\\d+\\.\\d*)([eE][-+]?\\d+)?$";
String s = new String(str);
return s.matches(pattern);
}
}