表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
重要的是掌握判断指向的字符是否为正确的判断条件。1.指针是否越界。 2.编写判断条件。本题主要考察对字符串的编程能力,主要对指针指向的数是否符合条件做判断。
思路:
1.定义一个指针,三个boolean变量 表示三个条件是否满足(A为整数,B为小数,C为指数)
2.根据有效数字写出两个函数分别判断指向的数字是否符合条件
3.判断B和C是否正确
static int i = 0;
public static boolean judgeNumber(String str){
if(str == null || str.length() == 0) return false;
str.trim();
boolean A = judgeInteger(str), B = false, C = false;
//判断是否有B,使用索引时要确保索引不越界
if(i < str.length() && str.charAt(i) == '.'){
i++;
B = unSignedInteger(str);
}
//判断是否有C
if(i < str.length() && (str.charAt(i) =='e' || str.charAt(i) == 'E')){
i++;
C = judgeInteger(str);
if(!C){
return false;
}
}
//这里说明C是合格的 判断A和B的情况
//i 必须扫描完str字符串 (A合格则合格,A不合格则B必须合格)
return i ==str.length() && (A || B);
}
public static boolean judgeInteger(String str){
if(i < str.length() && (str.charAt(i) == '+' || str.charAt(i) == '-')){
i++;
}
return unSignedInteger(str);
}
public static boolean unSignedInteger(String str){
int start = i;
while(i < str.length() && (str.charAt(i) >= '0' && str.charAt(i) <= '9')){
i++;
}
//i > start 证明扫描到数据
return i > start;
}