**描述
请实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。
**
例如,字符串[“+100”,“5e2”,“-123”,“3.1416”,“-1E-16”]都表示数值。
但是[“12e”,“1a3.14”,“1.2.3”,“±5”,“12e+4.3”]都不是数值。
提示:
1.1 <= str.length <= 25
2.str 仅含英文字母(大写和小写),数字(0-9),加号 ‘+’ ,减号 ‘-’ ,空格 ’ ’ 或者点 ‘.’ 。
3.如果怀疑用例是不是能表示为数值的,可以使用python的print(float(str))去查看
进阶:时间复杂度O(n)\O(n) ,空间复杂度O(n)\O(n)
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
public boolean isNumeric (String str) {
// write code here
//首先判断边界条件
if(str.length() == 0 || str == null){
return false;
}
//变量
boolean res = true;//结果变量
boolean num = false;//判断数字是否出现
boolean dot = false;//判断小数点是否出现
boolean e = false;//判断e是否出现
//将字符串转化为字符数组(去空格)
//char[] s = str.toCharArray();//别忘记了去空格
char[] s = str.trim().toCharArray();
//循环遍历判断
for(int i = 0; i < s.length; i++){
// if(s[i] == ' '){//空格 不对 " 1 "情况
// //空格只能出现在第一个位置或者最后一个位置
// if(i != 0 && i != (s.length - 1)){
// return false;
// }
// }
if(s[i] >= '0' && s[i] <= '9'){//数字
//出现数字
num = true;
}else if(s[i] == '.'){//.
//出现.
// . 之前不可以有. 或 e
if(dot || e){
return false;
}
dot = true;
}else if(s[i] == 'e' || s[i] == 'E'){//e
//e 之前不能有 e 且必须有数字
if(e || !num){
return false;
}
e = true;
//注意 12e 12e+不符合
//判断确保e之后也有数字
//令num = false,如果之后还有数组num会在下次循环中置为true
num = false;
}else if(s[i] == '+' || s[i] == '-'){// + -
//+ 、- 出现在第一个位置 或 e后第一个位置
//+ 、- 既没有出现在第一个位置,也没有出现在e/E之后的第一个位置,
//False
if(i != 0 && s[i - 1] != 'e' && s[i - 1] != 'E'){
return false;
}
}else{//其他字符
return false;
} //if
} //for
return num;
}//isNumeric
}//class