表示数值的字符串
思路
多边界的问题,
求解
package swordPointingToTheOffer;
public class Twenty {
public static boolean isNumber(String s) {
//空格,小数点,E/e, 普通字符, + -
if(s ==null||s.length()<=0){
return false;
}
//去掉首尾的空格,并且转换为字符数组
char[] res = s.trim().toCharArray();
if(res.length<0){
return false;
}
int n =res.length;
if(n==1&&res[0]=='.'){
return false;
}else if(n==0){
return false;
}
boolean is_dot = false;
boolean is_e_or_E = false;
boolean is_num = false;
//逐一检查是否合格
for (int i =0;i<n;i++){
if(res[i]>='0'&&res[i]<='9'){
is_num = true;
}else if(res[i]=='.'){
//小数点的前面不能有重复的小数点,也不能出现e/E
if(is_dot||is_e_or_E){
return false;
}
is_dot = true;
}else if(res[i]=='e'||res[i]=='E'){
// e/E 的前面要有一个数字,且不能再重复出现eE
if(is_e_or_E||!is_num){
return false;
}
is_e_or_E = true;
is_num = false; //重置 (5e2)
}else if(res[i]=='-'||res[i]=='+'){
//-1E-16
if(i!=0 && res[i-1]!='e'&&res[i-1]!='E'){
return false;
}
}else {
//其他的字符,直接出错
return false;
}
}
return is_num;
}
public static void main(String[] args) {
// System.out.println(isNumber("-1E-16"));
// System.out.println(isNumber("1a3.14"));
String arr[]={"12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"};
System.out.println(arr[0]);
System.out.println(isNumber(arr[0]));
}
}