【题目】请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
package com.exe6.offer;
/**【题目】
* 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
* 例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。
* 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
* @author WGS
*
*/
public class IsString {
int index=0;
public boolean isString(char[] str){
if(str==null || str.length<=0) return false; int len=str.length; //0 去除首尾空格
while(str[index]==' ')
index++;
if(index>=len) return false;
while(str[len-1]==' ')
len--;
if(len<=0) return false; //1 判断是否正负号
if(str[index]=='+' || str[index]=='-')
index++;
if(index>=len) return false;
//2 判断正负号后的整数 是整数就直接跳过,不是在整数则跳到下一步;
scanDigits(str,index);
if(index==len) return true;
int index2=0; //3 判断小数点后是否满足
if(str[index]=='.'){
index++;
if(index==len) return true;
index2 = index;
scanDigits(str,index); if(index==index2) return false;//说明index没变,.后数不满足整数条件
if(index==len) return true;
}
//4 判断科学计数法
if(str[index]=='e'||str[index]=='E'){
index++;
if(index==len)
return false;
if(str[index]=='+' || str[index]=='-')
index++;
index2=index;
scanDigits(str,index);
if(index==index2) return false;//说明index没变,.后数不满足整数条件
if(index==len) return true;
} return false; }
private void scanDigits(char[] str, int i) {
while(i<str.length &&str[i]<='9' && str[i]>='0'){
i++;
index++;
}
} public static void main(String[] args) {
String s = "24.44";
boolean b = new IsString().isString(s.toCharArray());
System.out.println(b);
} }