前言
最近在做一个财务报销系统,里面有各种金额的字段属性需要校验输入的字符串必须是数字,所以需要有一个检验数据是否为数字的校验逻辑。我们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)); } }
总结:
数据合法性的校验是我们开发管理信息系统最基本的操作,现在最常用的还是使用正则表达式来验证。