版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
/*题目 *请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 * * */ /*思路 *例如,字符串 “+100”、”5e2”、”-123”、”3.1415” 以及 “-1E-16” 都表示数值, * 但”12e”、”1a3.14”、”1.2.3”、”+-5” 以及 “12e+5.4” 都不是 * 具体思路见代码注释 * */
public boolean isNumeric(char[] str) {
//判断数据合理
if(str == null){
return false;
}
int index = 0; //记录+-
int encount = 0; //记录 e
int point = 0; //记录点
//+—可以玩为第一个或者 在 e之后
if(str[0] == '-' || str[0] == '+' )
index++;
for(int i = index; i < str.length; i++){
if(str[i] == '-' || str[i] == '+'){
if(str[i-1] == 'e' || str[i-1]== 'E') //即!-又!=
continue;
else
return false;
}
//如果是e就得 不能出现首位末尾 并且 前为数字
if(str[i] == 'e' || str[i] == 'E'){
encount++;
if(encount > 1)
return false;
if(i == 0 || i == str.length-1 )
return false;
if(str[i-1] > 57 || str[i-1] <48)
return false;
point++;
continue;
}
//点不能出现 末位只能出现一次,不能出现指数之后,所以在E出现后要标记
if(str[i] == '.'){
if(i == str.length-1)
return false;
point++;
if(point > 1)
return false;
continue;
}
//如果以上符号都不是,在判断是不是其他字符
if(str[i] > 57 || str[i] < 48)
return false;
}
return true;
}