• JAVA如何验证输入的字符串是否为数字
  • 发布于 2个月前
  • 317 热度
    0 评论

前言

最近在做一个财务报销系统,里面有各种金额的字段属性需要校验输入的字符串必须是数字,所以需要有一个检验数据是否为数字的校验逻辑。我们JAVA做输入的内容是否为数字的逻辑主要有两种方式,一种是使用正则表达式,另一种是jdk中Character的方法判断。今天我们分别就这种两种方法举例说明一下。


方法1.利用正则表达式

package com.ywyself.utils;
 
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
 
public class Number {
 
    /**
     * 检查是否为整数,不区分正负
     * 堆代码 duidaima.com
     * @param str
     * @return true|当为整数时
     */
    public static boolean isInteger(String str) {
        return Pattern.compile("^-?([1-9]+[0-9]+)|0$").matcher(str).matches();
    }
 
    /**
     * 检查是否为【正】整数
     *
     * @param str
     * @return true|当为正整数时
     */
    public static boolean isIntegerPositive(String str) {
        return Pattern.compile("^0?[1-9]+$").matcher(str).matches();
    }
 
    /**
     * 检查是否为【负】整数
     *
     * @param str
     * @return true|当为负整数时
     */
    public static boolean isIntegerNegative(String str) {
        return Pattern.compile("^-0?[1-9]+$").matcher(str).matches();
    }
 
    /**
     * 检查是否为浮点数
     *
     * @param str
     * @return true|当为浮点数时
     */
    public static boolean isFloat(String str) {
        return Pattern.compile("^-?(([1-9][0-9]*\\.[0-9]*)|(0\\.[0-9]*))[1-9]+$").matcher(str).matches();
    }
 
    /**
     * 检查是否为【正】浮点数
     *
     * @param str
     * @return true|当为正浮点数时
     */
    public static boolean isFloatPositive(String str) {
        return Pattern.compile("^(([1-9][0-9]*\\.[0-9]*)|(0\\.[0-9]*))[1-9]+$").matcher(str).matches();
    }
 
    /**
     * 检查是否为【负】浮点数
     *
     * @param str
     * @return true|当为负浮点数时
     */
    public static boolean isFloatNegative(String str) {
        return Pattern.compile("^-(([1-9][0-9]*\\.[0-9]*)|(0\\.[0-9]*))[1-9]+$").matcher(str).matches();
    }
 
    /**
     * 检查是否为数字,包含整数和浮点数,以及正负数
     *
     * @param str
     * @return true|为整数或者浮点数
     */
    public static boolean isNumber(String str) {
        return isInteger(str) || isFloat(str);
    }
 
    public static void main(String[] args) {
        List<String> test = new ArrayList<String>();
        test.add("0");
        test.add("-0");
        test.add("123");
        test.add("-123");
        test.add("0123");
        test.add("-0123");
        test.add("00123");
        test.add("-00123");
        test.add("0.123");
        test.add("0.0123");
        test.add("0.00123");
        test.add("-0.123");
        test.add("-0.0123");
        test.add("-0.0123");
        test.add("-0.00");
        test.add("00.123");
        test.add("-00.123");
        System.out.println("------------整数");
        for (String s : test) {
            System.out.printf("%5b   %s\n", isInteger(s), s);
        }
        System.out.println("------------正整数");
        for (String s : test) {
            System.out.printf("%5b   %s\n", isIntegerPositive(s), s);
        }
        System.out.println("------------负整数");
        for (String s : test) {
            System.out.printf("%5b   %s\n", isIntegerNegative(s), s);
        }
        System.out.println("------------小数");
        for (String s : test) {
            System.out.printf("%5b   %s\n", isFloat(s), s);
        }
        System.out.println("------------正小数");
        for (String s : test) {
            System.out.printf("%5b   %s\n", isFloatPositive(s), s);
        }
        System.out.println("------------负小数");
        for (String s : test) {
            System.out.printf("%5b   %s\n", isFloatNegative(s), s);
        }
        System.out.println("------------数字");
        for (String s : test) {
            System.out.printf("%5b   %s\n", isNumber(s), s);
        }
    }
}

方法2.利用的jdk中Character的方法判断
package com.ywyself.utils;
 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Number {
 
    /**
     * 判断字符数组中的所有的元素是否为数字
     * 堆代码 duidaima.com
     * @param character
     *            待检查的字符数组
     * @return TRUE|是
     */
    public static boolean isNumberLegal(char[] character) {
        for (char c : character) {
            if (!Character.isDigit(c)) {
                return false;
            }
        }
        return true;
    }
 
    /**
     * 判断字符串是否为数字,忽略正负数
     * 
     * @param string
     *            待检查的字符串
     * @param ignorePositiveAndNegative
     *            是否忽略正负,TRUE|去除字符串前面的一个“-”号(如果有)
     * @return TRUE|字符串为合法数字
     */
    public static boolean isNumber(String string, boolean ignorePositiveAndNegative) {
        if (string.startsWith("-") && ignorePositiveAndNegative) {
            string = string.substring(1);
        }
        return isNumberLegal(string.toCharArray());
    }
 
    /**
     * 判断字符串是否全部为数字
     * 
     * @param string
     *            待检查的字符串
     * @return TRUE|字符串为正数或者负数
     */
    public static boolean isNumber(String string) {
        return isNumber(string, true);
    }
 
    public static void main(String[] args) {
        System.out.println(isNumber("-123"));
        System.out.println(isNumber("-123", false));
        System.out.println(isNumber("123"));
        System.out.println(isNumber("123", false));
    }
 
}

总结:

数据合法性的校验是我们开发管理信息系统最基本的操作,现在最常用的还是使用正则表达式来验证。

用户评论