题目:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。
解题
class Solution {
public boolean isNumber(String s) {
//.之前不能出现.或者e
//e之前不能出现e且必须出现数字
//+-出现在第0个位置或者出现在e/E后的第一个位置才合法
boolean seeDot = false;
boolean seeNum = false;
boolean seeE = false;
//去掉首位空格
s = s.trim();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
// 判断是否是数字
if(c >= '0' && c <= '9') {
seeNum = true;
} else if(c == '.'){
//之前不能出现.或者e
if(seeE||seeDot) {
return false;
}
seeDot = true;
} else if(c == 'e' || c== 'E') {
//如果出现过了e或者没有出现数字,错误
if(seeE || !seeNum) {
return false;
}
seeE = true;
seeNum = false;//排除12e这种情况
} else if(c == '-'|| c =='+') {
//如果不是第一个位置,且之前一个位置不是e/E 错误
if(i != 0 && s.charAt(i-1) != 'e'&& s.charAt(i-1) != 'E' ){
return false;
}
} else {
return false;
}
}
return seeNum;
}
}