/**
* 表示数值的字符串遵循模式 A[.[B]][e|EC]或者.B[e|EC]
* 其中A为数值的整数部分,B紧跟小数点,为数值的小数部分,C紧跟着e或者E,为数值的指数部分
* A和C都可能以+或者-开头的0~9的数位串
* B也是0~9的数位串,但是不能以正负号开头
*
* @param str
* @return
*/
public boolean isNumeric (String str) {
// write code here
if (str == null || str.length() == 0){
return false;
}
if (str.length() == 1 && (str.charAt(0) > '9' || str.charAt(0) < '0')){
return false;
}
int index = 0;
char lastE = str.charAt(0);
if (str.charAt(0) == '+' || str.charAt(0) == '-'){
index++;
}
while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9'){
lastE = str.charAt(index);
index ++;
if (index == str.length()){
return true;
}
}
if (index < str.length() && str.charAt(index) == '.'){
index ++;
while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9'){
index++;
if (index == str.length()){
return true;
}
}
if (str.charAt(index) == 'E' || str.charAt(index) == 'e'){
index ++;
if (str.length() == index){
return false;
}
if (str.charAt(index) == '+' || str.charAt(index) == '-'){
index++;
}
if (str.length() == index){
return false;
}
while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9'){
index++;
if (index == str.length()){
return true;
}
}
if (str.length() != index){
return false;
}
}else {
return false;
}
}else if (index < str.length() &&(lastE != '+' && lastE != '-')&& (str.charAt(index) == 'E' || str.charAt(index) == 'e')){
index ++;
if (str.length() == index){
return false;
}
if (str.charAt(index) == '+' || str.charAt(index) == '-'){
index++;
}
if (str.length() == index){
return false;
}
while (index < str.length() && str.charAt(index) >= '0' && str.charAt(index) <= '9'){
index++;
if (index == str.length()){
return true;
}
}
if (str.length() != index){
return false;
}
}else {
return false;
}
return true;
}