题目描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)
思路:逐个字符进行判断,e或E和小数点最多出现一次,而e或E的前一个必 须是数字,且不能是第一个或最后一个字符,符号的前一个字符不能是e或E。也 可用正则表达式判断!
package Function;
//逐个字符进行判断,e或E和小数点最多出现一次,
// 而e或E的前一个必须是数字,且不能是第一个或最后一个字符,
// 符号的前一个字符不能是e或E。
// 也可用正则表达式判断!
public class isNumeric20 {
public boolean isNumeric(char[] str) {
if (str == null)
return false;
int index = 0;
int ecount = 0;
int point = 0;
// 如 果 第 一 个 字 符 是 符 号 就 跳 过
if (str[0] == '-' || str[0] == '+')
index++;
//E-13
for (int i = index; i < str.length; i++) {
//判断字符中间出现正负号
if (str[i] == '-' || str[i] == '+') {
if (str[i-1] != 'e' && str[i-1] != 'E')
return false;
//i++跳出这一次的循环
continue;
}
//判断字符中有e 只能出现一次
if (str[i] == 'e' || str[i] == 'E') {
ecount++;//e的个数
if (ecount > 1)
return false;
//48-0 57-9
if (i == 0 || str[i-1] < 48
|| str[i-1] > 57
|| i == str.length-1)
return false;
point++;//e后面不能出现出现小数点
continue;
}
if (str[i] == '.') {
point++;
if (point > 1)
return false;
continue;
}
// 出 现 非 数 字 且 不 是 e/E则 返 回 false ( 小 数 点 和 符 号 用 continue跳 过 了 )
if ((str[i] < 48 || str[i] > 57) && (str[i] != 'e') && (str[i]!= 'E'))
return false;
}
return true;
}
}