leetcode-65-有效的数字

来源:互联网 发布:陕西师大网络教育官网 编辑:程序博客网 时间:2024/04/30 21:10

验证给定的字符串是否为数字。

这个题最恶心之处在于给你的样例太少,而实际中的情况却非常复杂。很多很多意想不到的情况,不断地WA......

这个题做的人难受的一批,查了一下还是我太嫩了,大佬们都是用有限状态机来做的(不会、不存在的、下一个...)......

下面是AC代码:

import java.util.Scanner;public class leetcode65 {    public boolean isNumber(String s) {        s = s.trim(); //删除前后空格        if(s.length()<1) //那就是全是空格咯            return false;        boolean e=false , dian=false , number = false , fuhao = false;        /*        e      字母e,大坑        fuhao  有没有正负号 +-        dian   有没有点 .        number 有无数字         */        for (int i = 0 ; i < s.length() ; i++ ) {            if ( s.charAt(i) == '-' || s.charAt(i) == '+' ){        //判断正负号                if(!fuhao && (i==0 || s.charAt(i-1)=='e' && i < s.length()-1 ))                    fuhao = true; //符号变成有(true)                else                    return false;            }            else if(s.charAt(i)=='.'){  //判断小数点的有无                if(s.length()!=1 && !dian && !e)                    dian = true;//点变成有                else                    return false;            }            else if(s.charAt(i)=='e'){ //坑爹的字母e                if(number && !e && i<s.length()-1){   // e前面必须要有数字,所以引入number来判断                    e = true;                    fuhao = false; // 因为有像 24e+6,7e-4 这种情况,一旦出现e了,fuhao-->false                }                else                    return false;            }            else if(s.charAt(i)>='0' && s.charAt(i)<='9'){                if(!number)  //判断是否输入了数字                    number=true;            }            else {                return false;            }        }        if(number)            return true;        else            return false;    }    public static void main(String[] args) {        Scanner map = new Scanner(System.in);        leetcode65 lt = new leetcode65();        String s = map.next();        System.out.println(lt.isNumber(s));    }}


原创粉丝点击