一、工具类
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、该例效果