Valid Number
Validate if a given string can be interpreted as a decimal number.
Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3 " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:
Numbers 0-9
Exponent - "e"
Positive/negative sign - "+"/"-"
Decimal point - "."
Of course, the context of these characters also matters in the input.
思路:
去掉 手尾的空格
用i trace 现在都到哪了,根据正确 的格式来判断,注意trim后加一个空格
class Solution {
public boolean isNumber(String s) {
if(s== null || s.length() == 0){
return false;
}
s = s.trim()+" ";//给最后的for循环 i < len 后 i == len 判断留的
int i = 0, len = s.length()-1;
char[] charArr = s.toCharArray();
if(charArr[i] == '+' || charArr[i] == '-'){
i++;
}
int isDigit = 0, isPoint = 0;
while(Character.isDigit(charArr[i]) || charArr[i] == '.'){
if(Character.isDigit(charArr[i])){
isDigit++;
}
else if(charArr[i] == '.'){
isPoint++;
}
i++;
}
if(isDigit <= 0 || isPoint >1){
return false;
}
if(charArr[i] == 'e'){
i++;
if(charArr[i] == '+' || charArr[i] == '-'){
i++;
}
if(i == len){
return false;
}
for(;i<len;i++){
if(!Character.isDigit(charArr[i])){
return false;
}
}
}
return i == len;
}
}没有e的版本
Last updated