
1.题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
2.解题思路
(1) 先判断每个字符是否合法
(2) 正负号的位置和e不能在结尾位置
(3) 小数点只能存在一个
(4)正负号在中间位置时,前面是e后面是数字
(5)e后面不能有小数点
3.代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
public class { public boolean isNumeric(char[] str) { String ss = String.valueOf(str); int len = ss.length(); for(int i=0; i<len; i++){ char c = ss.charAt(i); if(!((c>='0' && c <= '9') || c=='e' || c=='E'|| c=='+' || c=='-'|| c=='.')) return false; } if(ss.charAt(len-1) == '+' || ss.charAt(len-1) == '-' || ss.charAt(len-1) == 'E' || ss.charAt(len-1) == 'e') return false; if(ss.indexOf(".") != ss.lastIndexOf(".")) return false; for(int i=1; i<len-1; i++){ char c = ss.charAt(i); if(c == '+' || c=='-'){ if(!(ss.charAt(i-1) == 'e' || ss.charAt(i-1) == 'E') ||!(ss.charAt(i+1)>='0' && ss.charAt(i+1)<='9')) return false; } } for(int i=1; i<len; i++){ char c = ss.charAt(i); if(c == 'e' || c=='E'){ if(i==len-1) return false; if(ss.charAt(i+1) == '+' || ss.charAt(i+1) == '-'){ if(ss.indexOf(".", i+2) != -1){ return false; } }else{ if(ss.indexOf(".", i+1) != -1){ return false; } } } } return true; } }
|
近期评论