1. 题目
2. 题解
- 常规思路好理解= =,直接逐位遍历一遍,并做好标记
- 使用trim()函数除去头尾空字符
- char[] str = s.trim().toCharArray();
class Solution {
public boolean isNumber(String s) {
if (s == null || s.length() == 0)
return false;
boolean isNum = false, isDot = false, iseOrE = false; // 标记是否遇到数位、小数点、‘e’或'E'
char[] str = s.trim().toCharArray(); // 删除字符串头尾的空格,转为字符数组,方便遍历判断每个字符
for (int i = 0; i < str.length; i++) {
if (str[i] >= '0' && str[i] <= '9') //判断当前字符是否为 0~9 的数位
isNum = true;
else if (str[i] == '.') { // 遇到小数点
if (isDot || iseOrE)
return false; // 小数点之前可以没有整数,但是不能重复出现小数点、或出现‘e’、'E'
isDot = true; // 标记已经遇到小数点
}
else if (str[i] == 'e' || str[i] == 'E') { // 遇到‘e’或'E'
if (!isNum || iseOrE) // ‘e’或'E'前面必须有整数,且前面不能重复出现‘e’或'E'
return false;
iseOrE = true; // 标记已经遇到‘e’或'E'
isNum = false; // 重置isNum,因为‘e’或'E'之后也必须接上整数,防止出现 123e或者123e+的非法情况
}
else if (str[i] == '-' || str[i] == '+') {
if (i != 0 && str[i - 1] != 'e' && str[i - 1] != 'E')
return false; // 正负号只可能出现在第一个位置,或者出现在‘e’或'E'的后面一个位置
}
else
return false; // 其它情况均为不合法字符
}
return isNum;
}
}
除去头尾空字符也可以:
int start = 0,end = s.length()-1;
for(int i = 0; i <= end; ++i) { //找到首位非空格下标
if(s.charAt(i) != ' ') {
start = i;
break;
}
}
for(int i = end; i >= 0; --i) { //找到末尾非空格下标
if(s.charAt(i) != ' ') {
end = i;
break;
}
}
char[] t = s.toCharArray();
int m = 0;
for(int i = start; i <= end; ++i) { //除去空格后的字符串s 放入char数组t
t[m++] = s.charAt(i);
}