判断是否能表示数值的字符串
表示数值的字符串
http://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2
我们需要检验三部分:整数、小数、指数部分。
public class Solution { private int index = 0; public boolean isNumeric(char[] str) { if(str.length < 1) return false; //判断整数部分是否符合要求 boolean flag = scanInteger(str); //判断小数部分是否符合要求 if(index < str.length && str[index] == '.'){ index++; //用||的原因: //1. 小数可以没有整数部分,例如:.123 等于 0.123 //2. 小数点后面可以没有数字,例如:233. 等于233.0 //3. 小数点前面和后面可以有数字,例如233.16 flag = scanUnsignedInteger(str) || flag; } //判断指数部分是否符合要求 if(index < str.length && (str[index] == 'E' || str[index] == 'e')){ index++; //用&&的原因: //当e或E前没有数字时,整个字符串不能表示数字 //当e或E后面没有整数时,整个字符串不能表示数字 flag = flag && scanInteger(str); } //总的判断 return flag && index == str.length; } //有符号时调用此方法判断 private boolean scanInteger(char[] str){ if(index < str.length && (str[index] == '+' || str[index] == '-')) index++; return scanUnsignedInteger(str); } //无符号时调用此方法判断 private boolean scanUnsignedInteger(char[] str){ int start = index; while(index < str.length && str[index] >= '0' && str[index] <= '9') index++; //当str中存在若干0-9数字时,返回true return start < index; } }