设置两个参分别表示是否出现过E/e和是否出现过'.',然后遍历一遍数组:
当遇到e/E:如果之前出现过e/E,返回false,如果e/E是出现在数组最后一个位置,返回false
当遇到'+','-':如果这个符号不是第一个位置,而且前面一个字符不是e,那么就返回false,如果字符出现在最后一个位置,返回false
当遇到'.':如果这个符号出现之前出现过e/E,或者之前还出现过'.',或者是最后一个字符,那么返回false
如果遍历完一遍数组都没有返回false,那么这个数组是字符串数组。
public class Solution {
public boolean isNumeric(char[] str) {
if(str==null||str.length==0){
return false;
}
boolean hasE=false;
boolean hasDot=false;
for(int i=0;i<str.length;i++){
if(str[i]=='E'||str[i]=='e'){
if(hasE||i==str.length-1){
return false;
}
hasE=true;
}
else if(str[i]=='+'||str[i]=='-'){
if((i>0&&str[i-1]!='e'&&str[i-1]!='E')||i==str.length-1){
return false;
}
}
else if(str[i]=='.'){
if(hasDot||hasE||i==str.length-1){
return false;
}
hasDot=true;
}
else if(str[i]>'9'||str[i]<'0'){
return false;
}
}
return true;
}
}