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.
判断所给的数据是否为10进制数。包含科学计数法:
class Solution {
public boolean isNumber(String s) {
if(s == null ||s.isEmpty()) {
return false;
}
int aIndex = s.indexOf("e");
int bIndex = s.lastIndexOf("e");
if(aIndex != bIndex) {
return false;
}
String[] tmps = s.trim().split("e");
boolean c = s.contains("e");
if(c && tmps.length!=2) {
return false;
}else if(!c && tmps.length!=1) {
return false;
}
boolean scient = false;
for(int index=0;index<tmps.length;index++) {
if(index==1) {
scient = true;
}
if(!isValid(tmps[index],scient)) {
return false;
}
}
return true;
}
public boolean isValid(String tmp,boolean scient) {
if(tmp==null || tmp.isEmpty()) {
return false;
}
int index=0;
char[]tmps = tmp.toCharArray();
if(tmps[0]=='+'||tmps[0]=='-') {
index=1;
}
if(tmps.length <= index) {
return false;
}
if(scient) {
for(;index<tmps.length;index++) {
if(!Character.isDigit(tmps[index])) {
return false;
}
}
return true;
}else {
//是否包括.
boolean contain = false;
for(int tmpIndex = index;tmpIndex<tmps.length;tmpIndex++) {
if(!Character.isDigit(tmps[tmpIndex])) {
if(tmps[tmpIndex]=='.' && !contain ) {
if((tmpIndex>=index && tmpIndex>=1 && Character.isDigit(tmps[tmpIndex-1])) || (tmpIndex==index && tmps.length > tmpIndex+1&&Character.isDigit(tmps[tmpIndex+1]))) {
contain = true;
}else{
return false;
}
}else {
return false;
}
}
}
}
return true;
}
}