题目:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
思路:
正确的数字表达式是+-在启示位置,小数点只出现依次,E后面的在重新验证.
代码:
/**
* Created by Hammy on 2018/2/2.
*/
public class IsNumberIC {
/**
* @param str
* @return
*/
private int index = 0;
public boolean isNumeric(char[] str){
if(str == null || str.length == 0){
return false;
}
boolean flag = scanInteger(str);
//如果遇到小数点就验证在E之前只能是数字
if(index < str.length && str[index] == '.'){
index++;
flag = scanUnsignedInteger(str);
}
//遇到E就重新在验证一次(e后面不能存在小数点)
if(index < str.length && (str[index] == 'e' || str[index] == 'E')){
index++;
flag = scanInteger(str);
}
return flag && index == str.length;
}
//检查+-符号
private boolean scanInteger(char[] str){
if(index < str.length && (str[index] == '+' || str[index] == '-')){
index++;
}
return scanUnsignedInteger(str);
}
//检查后面仅仅是数字
private boolean scanUnsignedInteger(char[] str){
int start = index;
while (index < str.length && (str[index] >= '0' && str[index] <= '9'))
index++;
return start < index;
}
}
网友评论