One minute
剑指Offer(Java实现)20题
面试题20:表示数值的字符串
- 问题
- 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串
"+100","5e2","-123","3.1416"和"-1E-16"
都表示数值。但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"
都不是。
- 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串
/**
* @Author GJ1e
* @Create 2019/12/18
* @Time 19:28
*
*/
public class Solution20 {
public boolean isNumeric(char[] str){
if (str==null || str.length<=0)
return false;
//长度为1,则必须是数字0-9
if (str.length==1){
return str[0]>='0' && str[0]<='9';
}
boolean hasSign = false;//+-符号标志
boolean hasDot = false; //'.'小数点标志
boolean hasE = false; //E或e标志
for (int i = 0; i < str.length; i++) {
if (str[i]=='+' || str[i]=='-'){
//第一次出现且不在开头,则前一个字符必须是E或e
if (!hasSign && i>0 && str[i-1]!='e' && str[i-1]!= 'E')
return false;
//第二次出现+-符号,则前一个字符必须是E或e
if (hasSign && str[i-1]!='e' && str[i-1]!= 'E')
return false;
hasSign = true;
}else if (str[i] == '.'){
//只能出现一次小数点,且e或E之后不能出现
if (hasDot || hasE) return false;
hasDot = true;
}else if (str[i]=='e' || str[i]=='E'){
//E或e不能出现在最后一个
if (i == str.length-1) return false;
//E或e只能出现一次
if (hasE) return false;
hasE = true;
}else if (str[i]<'0' || str[i]>'9'){
//字符串中出现不是数字或者+-Ee这些符号的直接返回false;
return false;
}
}
return true;
}
}
Read other posts