数字类型的字符串判断或比较

一、工具类

package com.utils.math;

import java.util.regex.Pattern;

public class MathTF {

    public static final int NUMERIC_INTEGER = 0;// 整数
    public static final int NUMERIC_DECIMAL = 1;// 小数(浮点数)
    public static final int NUMERIC_INTEGER_OR_DECIMAL = 2; // (可转化为)数字

    /**
     * @param numeric     Object              主参数(即,需要做出判断的数字)
     * @param numericType int    0-整数       副参数(即,要求判断的类型——仅支持正数)
     * @param numericType int    1-小数
     * @param numericType int    2-整数、小数  (实数)
     * @return boolean
     * 注意1: 1、必须非负数; 2、仅整数判断时,不允许出现小数点;3、仅小数判断时,必须有小数点且数字完整  (不符合以上要求时,一律 @return false)
     * 注意2:"以上注释"为"初始注释",后面改进代码时可能没有同步改进“注释",实际效果
     * */
    public static boolean isNumeric(Object numeric, int numericType){
        String number = String.valueOf(numeric);
        // 排除空格
        if (number.equals(""))
            return false;
        // 如果首字符为“正、负”号时,去掉该首字符(即,支持正负数判断)
        if (number.indexOf("-")==0 || number.indexOf("+")==0){
            number = number.substring(1);
        }
        //是否有小数点
        if (number.indexOf(".")>0){
            //整数判断-非
            if (numericType == NUMERIC_INTEGER){
                return false;
            }
            // 只有一个小数点
            // number.indexOf(".") == number.lastIndexOf(".")   第一个小数点与最后一个重合
            // number.split("\\.").length==2                    0个小数点分成一份,1个小数点分成两份,两个小数点分成三份  (不太准确: "0."一分,".0"两分,等等)
            if (number.indexOf(".") == number.lastIndexOf(".") //确保只有1个小数点
                    && number.split("\\.").length==2 //确保小数点可分成两分
                    && number.split("\\.")[0].length()>0 && number.split("\\.")[1].length()>0){//确保小数点分成的两分长度都大于零
                //去掉小数点后,整数判断-是or非
                return Pattern.compile("[0-9]*").matcher(number.replace(".","")).matches();
            }
            //多个小数点或其它条件
            return false;
        }else {
            //小数判断-非
            if (numericType == NUMERIC_DECIMAL){
                return false;
            }
            //整数判断-是or非
            return Pattern.compile("[0-9]*").matcher(number).matches();
        }
    }
    /**
     * 是否数字数字  ——是true , 否false
     * */
    public static boolean isNumeric(Object numeric){
        String number = String.valueOf(numeric);
        // 排除空格
        if (number.equals(""))
            return false;
        // 首字符为 "-" 号
        if (number.indexOf("-")==0){
            //是否只有一个 "-" 号
            if (number.indexOf("-")==number.lastIndexOf("-")){
                if (number.replace("-","").equals("")){
                    return false;
                }
                return isNumeric(number.replace("-",""),NUMERIC_INTEGER_OR_DECIMAL);
            }else {
                return false;
            }
        }
        // 首字符为 "+" 号
        else if (number.indexOf("+")==0){
            //是否只有一个 "-" 号
            if (number.indexOf("+")==number.lastIndexOf("+")){
                if (number.replace("+","").equals("")){
                    return false;
                }
                return isNumeric(number.replace("+",""),NUMERIC_INTEGER_OR_DECIMAL);
            }else {
                return false;
            }
        }
        // 其它
        else {
            return isNumeric(number,NUMERIC_INTEGER_OR_DECIMAL);
        }
    }
    /**
     * 比较大小:== true ;  != false
     * Number 1 is equal to number 2
     * */
    public static boolean isEqualToNum2(Object num1, Object num2){
        if (isNumeric(num1,NUMERIC_INTEGER_OR_DECIMAL) && isNumeric(num2,NUMERIC_INTEGER_OR_DECIMAL)){
            return Float.parseFloat(String.valueOf(num1)) == Float.parseFloat(String.valueOf(num2));
        }
        return false;
    }
    /**
     * 比较大小:>= true ;  < false
     * Number 1 is greater than or equal to number 2
     * */
    public static boolean isGreaterThanOrEqualToNum2(Object num1, Object num2){
        if (isNumeric(num1,NUMERIC_INTEGER_OR_DECIMAL) && isNumeric(num2,NUMERIC_INTEGER_OR_DECIMAL)){
            return Float.parseFloat(String.valueOf(num1)) >= Float.parseFloat(String.valueOf(num2));
        }
        return false;
    }

    /**
     * 比较大小:《= true ;  > false
     * Number 1 is less than or equal to number 2
     * */
    public static boolean isLessThanOrEqualToNum2(Object num1, Object num2){
        if (isNumeric(num1,NUMERIC_INTEGER_OR_DECIMAL) && isNumeric(num2,NUMERIC_INTEGER_OR_DECIMAL)){
            return Float.parseFloat(String.valueOf(num1)) <= Float.parseFloat(String.valueOf(num2));
        }
        return false;
    }
}

二、工具类的调用

1、例:isNumeric(Object numeric, int numericType)

package com.main;

import com.utils.math.MathTF;

public class Main {


    public static void main(String[] args) {
        // 非数字字符串
        System.out.println("-----------12d------------");
        System.out.println("判断字符:12d");
        System.out.println("整数判断:" + MathTF.isNumeric("12d",0));
        System.out.println("小数判断:" + MathTF.isNumeric("12d",1));
        System.out.println("实数判断:" + MathTF.isNumeric("12d",2));
        // 0
        System.out.println("-----------0------------");
        System.out.println("判断字符:0");
        System.out.println("整数判断:" + MathTF.isNumeric("0",0));
        System.out.println("小数判断:" + MathTF.isNumeric("0",1));
        System.out.println("实数判断:" + MathTF.isNumeric("0",2));
        // 负小数
        System.out.println("-----------负小数------------");
        System.out.println("判断字符:-1.8");
        System.out.println("整数判断:" + MathTF.isNumeric("-1.8",0));
        System.out.println("小数判断:" + MathTF.isNumeric("-1.8",1));
        System.out.println("实数判断:" + MathTF.isNumeric("-1.8",2));
        // 负整数
        System.out.println("-----------负整数------------");
        System.out.println("判断字符:-28");
        System.out.println("整数判断:" + MathTF.isNumeric("-28",0));
        System.out.println("小数判断:" + MathTF.isNumeric("-28",1));
        System.out.println("实数判断:" + MathTF.isNumeric("-28",2));
        // 正小数
        System.out.println("-----------正小数------------");
        System.out.println("判断字符:1.7");
        System.out.println("整数判断:" + MathTF.isNumeric("1.7",0));
        System.out.println("小数判断:" + MathTF.isNumeric("1.7",1));
        System.out.println("实数判断:" + MathTF.isNumeric("1.7",2));
        // 正整数
        System.out.println("-----------正整数------------");
        System.out.println("判断字符:17");
        System.out.println("整数判断:" + MathTF.isNumeric("17",0));
        System.out.println("小数判断:" + MathTF.isNumeric("17",1));
        System.out.println("实数判断:" + MathTF.isNumeric("17",2));
    }

}

2、该例效果

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值