题目
验证给定的字符串是否为数字。 一些例子: “0”=>true “0.1”=> true “ABC”=>false “1 a”=> false “2E10”=>true
代码实现1:正则表达式
public boolean isNumber(String s) {
return s.matches("(\\s)*([+-])?(([0-9]*\\.)?([0-9]+)|([0-9]+)(\\.[0-9]*)?)([eE][\\+-]?[0-9]+)?(\\s)*");
}
代码实现2:
/**思路:这道题关键是分析所有会出现的情况。以及设置关键的flag来记录各种情况
* 首先使用trim()函数去除前后空格。
* 设置4个标志,分别是
* boolean pointSeen = false;//是否出现过小数点“.”
* boolean eSeen =alse;//是否出现过指数标志“e”
* boolean numberSeen = false;//是否出现过数字
* booleannumberAfterE = true;//e后面是否有数字
* 进行循环s.charAt(i):
* 1.如果属于[0,9],把numberSeen设为true
* 2.如果是‘.’,必须之前没有遇到'.'和'e'
* 3.如果是'e',必须之前没有遇到过'e'
* 4.如果是'+'或者'-',当前i必须是0,或者i-1上的字符是e
* 5.其他情况返回false
* /
public boolean isNumber(String s) {
s = s.trim();
if (s == null || s.length() == 0)
return false;
// 记录是否出现过数字
boolean numberSeen = false;
// 是否出现过小数点
boolean pointSeen = false;
// 是否出现过指数标志e
boolean eSeen = false;
// e后是否出现过数字
boolean numberAfterE = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= '0' && c <= '9') {// 如果是数字
numberSeen = true;
numberAfterE = true;
}else if (c == '.') {// 如果是小数点
if (pointSeen || eSeen)
return false;
pointSeen = true;
}else if (c == 'e') {// 如果是e,必须没有出现过且出现过数字
if (eSeen || !numberSeen)
return false;
eSeen = true;
numberAfterE = false;
}else if (c == '+' || c == '-') {// 如果出现正负号,必须是首位,或者前一位是e
if (i != 0 && s.charAt(i - 1) != 'e')
return false;
}else {
return false;
}
}
return numberSeen && numberAfterE;
}
题目来自牛客网leetcode