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