Main20-判断字符串是否表示数值(包括整数和小数)

判断字符串是否表示数值(包括整数和小数)

public class Main20  {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        boolean b  = new Main20().isInt(str);
        System.out.println(b);
    }

    private boolean isInt(String str) {
        if (str == null || str.length() == 0)return false;
        char[] ch = str.trim().toCharArray();//"1 "也满足
        boolean num = false; //字符串中是否出现了整数
        boolean dot = false; //是否出现了逗号
        boolean e = false; //是否出现了e或者E
        for (int i = 0; i < ch.length; i++) {
            if (ch[i] >= '0' && ch[i] <= '9'){
                num = true;//此时,记录下整数已出现过
            }else if (".".equals(String.valueOf(ch[i]))){//1.逗号之前不能有逗号和e|E
                if (dot || e)
                    return false;
                dot = true;//此时,记录下,","号已出现过
            }else if ("e".equals(String.valueOf(ch[i]).toLowerCase())){//2.e|E之前不能有e|E且必须有数字  且1.2e后面没有数字也不行
                if (e || !num)
                    return false;
                e = true;//记录下,e或者E已出现过了
                num = false;//1.2e,说明如果到此结束遍历,需要在此处将num置为false,表明最后一个值不是数字,不满足但凡是数字,最后一个自字符必须为整数的要求
            }else if ("-".equals(String.valueOf(ch[i])) || "+".equals(String.valueOf(ch[i]))){//3.+-必须在first或者e|E之后
                if (i != 0 && ! ( "e".equals(String.valueOf(ch[i-1]).toLowerCase()))){//二者均不满足则false
                    return false;
                }
            }else {
                //4.其他符号abc$`/等
                return false;
            }
        }
        //遍历过程中如果前面字符不满足,已经return false了;遍历完了str,说明除了最后一个字符外,前面的字符都满足数字的要求
        //所以,最后需要判断最后一个字符是不是数字,是则num=true整体都为数字,不是,则不是
        // 但凡是个数字,末尾值一定为整数!
        return num;
    }
}

猜你喜欢

转载自blog.csdn.net/tmax52HZ/article/details/107062292
今日推荐