剑指offer--20表示数值的字符串 题目代码结果 题目 代码 class Solution { public boolean isNumber(String s) { if (s == null || s.length() == 0) return false; s = s.trim();//去掉首位空格 boolean numFlag = false; boolean dotFlag = false; boolean eFlag = false; for (int i = 0; i < s.length(); i++) { //判定为数字,则标记numFlag if (s.charAt(i) >= '0' && s.charAt(i) <= '9') { numFlag = true; //判定为. 需要没出现过.并且没出现过e } else if (s.charAt(i) == '.' && !dotFlag && !eFlag) { dotFlag = true; //判定为e,需要没出现过e,并且出过数字了 } else if ((s.charAt(i) == 'e' || s.charAt(i) == 'E') && !eFlag && numFlag) { eFlag = true; numFlag = false;//为了避免123e这种请求,出现e之后就标志为false,若再出现数字就变true //判定为+-符号,只能出现在第一位或者紧接e后面 } else if ((s.charAt(i) == '+' || s.charAt(i) == '-') && (i == 0 || s.charAt(i - 1) == 'e' || s.charAt(i - 1) == 'E')) { //其他情况,都是非法的 } else return false; }return numFlag; } } class Solution { public boolean isNumber(String s) { if(s == null || s.length() == 0) return false; s = s.trim(); try{ double a = Double.parseDouble(s); } catch (Exception e){ return false;} char c = s.charAt(s.length()-1); return (c >= '0' && c <= '9') || c == '.'; } } 结果