【题目】请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
1 package com.exe6.offer; 2 /**【题目】 3 * 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 4 * 例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 5 * 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。 6 * @author WGS 7 * 8 */ 9 public class IsString { 10 int index=0; 11 public boolean isString(char[] str){ 12 if(str==null || str.length<=0) return false; 13 14 int len=str.length; 15 16 //0 去除首尾空格 17 while(str[index]==' ') 18 index++; 19 if(index>=len) return false; 20 while(str[len-1]==' ') 21 len--; 22 if(len<=0) return false; 23 24 //1 判断是否正负号 25 if(str[index]=='+' || str[index]=='-') 26 index++; 27 if(index>=len) return false; 28 //2 判断正负号后的整数 是整数就直接跳过,不是在整数则跳到下一步; 29 scanDigits(str,index); 30 if(index==len) return true; 31 int index2=0; 32 33 //3 判断小数点后是否满足 34 if(str[index]=='.'){ 35 index++; 36 if(index==len) return true; 37 index2 = index; 38 scanDigits(str,index); 39 40 if(index==index2) return false;//说明index没变,.后数不满足整数条件 41 if(index==len) return true; 42 } 43 //4 判断科学计数法 44 if(str[index]=='e'||str[index]=='E'){ 45 index++; 46 if(index==len) 47 return false; 48 if(str[index]=='+' || str[index]=='-') 49 index++; 50 index2=index; 51 scanDigits(str,index); 52 if(index==index2) return false;//说明index没变,.后数不满足整数条件 53 if(index==len) return true; 54 } 55 56 return false; 57 58 } 59 private void scanDigits(char[] str, int i) { 60 while(i<str.length &&str[i]<='9' && str[i]>='0'){ 61 i++; 62 index++; 63 } 64 } 65 66 public static void main(String[] args) { 67 String s = "24.44"; 68 boolean b = new IsString().isString(s.toCharArray()); 69 System.out.println(b); 70 } 71 72 }