经常会遇到这样的情况,需要判断一个字符串是否是一个合法的数,包括整数,小数或者实数。
网上查到很多文章大多是判断这个字符串是否全为数字,比如下面这段来自StringUtils的代码,可以看到,13.2这样的数字实际上会返回false,可是,他的确是一个数字。
- public static boolean isNumeric(String str) {
- if (str == null) {
- return false;
- }
- int sz = str.length();
- for (int i = 0; i < sz; i++) {
- if (Character.isDigit(str.charAt(i)) == false) {
- return false;
- }
- }
- return true;
- }
当然,网上还能查到很多其他方式,诸如用正则表达式判断是否0-9,用字符ascii码判断是否是数字以及用Double.parseDouble()是否抛出异常来判断是否为数字。
事实上,除了最后一种方式能达到我们的要求,其他的都很难真正做到类似的判断。但是最后一种方式也很难区别出到底是正整数,负整数,正小数还是负小数,而且,捕获异常的方式实在是有些难看。
基于此原因,我自己写了一个工具类,专门用作数的检测,目前能够检测正整数,负整数,整数,正小数,负小数,小数以及实数,采用的仍然是正则表达式的方式,当然,如果有遗漏或者错误,欢迎联系我以便更正,同时也欢迎修改或使用这些代码以便符合你的应用场景。
可以简单讲下正则的思想以便修改,
1. 对于正整数而言,可以带+号,第一个数字不能为0
2. 对于负整数而言,必须带负号,第一个数字也不能为0
3. 对于整数而言,实际是由0,正整数和负整数组成的,所以偷个懒用前两个方法一起判断
4. 对于正小数而言,可以考带+号,并考虑两种情况,第一个数字为0和第一个数字不为0,第一个数字为0时,则小数点后面应该不为0,第一个数字不为0时,小数点后可以为任意数字
5. 对于负小数而言,必须带负号,其余都同上
6. 对于小数,可以带正负号,并且带小数点就行了,但是至少保证小数点有一边不为空,所以这里还是分左边不为空和右边不为空的情况
7. 实数比较简单,,要么是整数,要么是小数
- package com.sap.cesp.creditinsight.web.app.util;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class NumberValidationUtils {
- private static boolean isMatch(String regex, String orginal){
- if (orginal == null || orginal.trim().equals("")) {
- return false;
- }
- Pattern pattern = Pattern.compile(regex);
- Matcher isNum = pattern.matcher(orginal);
- return isNum.matches();
- }
- public static boolean isPositiveInteger(String orginal) {
- return isMatch("^\\+{0,1}[1-9]\\d*", orginal);
- }
- public static boolean isNegativeInteger(String orginal) {
- return isMatch("^-[1-9]\\d*", orginal);
- }
- public static boolean isWholeNumber(String orginal) {
- return isMatch("[+-]{0,1}0", orginal) || isPositiveInteger(orginal) || isNegativeInteger(orginal);
- }
- public static boolean isPositiveDecimal(String orginal){
- return isMatch("\\+{0,1}[0]\\.[1-9]*|\\+{0,1}[1-9]\\d*\\.\\d*", orginal);
- }
- public static boolean isNegativeDecimal(String orginal){
- return isMatch("^-[0]\\.[1-9]*|^-[1-9]\\d*\\.\\d*", orginal);
- }
- public static boolean isDecimal(String orginal){
- return isMatch("[-+]{0,1}\\d+\\.\\d*|[-+]{0,1}\\d*\\.\\d+", orginal);
- }
- public static boolean isRealNumber(String orginal){
- return isWholeNumber(orginal) || isDecimal(orginal);
- }
- }
相关推荐
主要介绍了详解Java判断是否是整数,小数或实数的正则表达式,非常具有实用价值,需要的朋友可以参考下。
验证数字最简单正则表达式大全 输入完按回车后即可验证!(自认为最简单!) 正整数: 负整数: 整 数: 正小数: 负小数: 小 数: 实 数: 保留1位小数: 保留2位小数: 保留3位小数: [Ctrl+A...
在C#编程中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于模式匹配、查找、替换和验证输入数据。以下是对C#中常用正则表达式的总结: 1. **只能输入数字**:`^[0-9]*$` - 这个正则表达式确保...
在上述代码中,展示了几个基于正则表达式的JavaScript函数,用于检查输入的字符串是否符合特定的数值类型,包括数字、自然数、整数和实数。下面我们将详细解释这些函数及其所使用的正则表达式。 1. `strlen` 函数:...
主要介绍了最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式,其中包含保留1位小数、保留2位小数、保留3位小数等正则,需要的朋友可以参考下
正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。它由特殊的字符序列组成,这些序列定义了要查找的模式。以下是一些常见的正则表达式实例及其用途: 1. 验证用户名和密码:`"^[a-...
正则表达式是一种强大的文本处理工具,它用于在字符串中进行模式匹配和查找、替换等操作。在编程语言和文本编辑器中广泛使用,特别是在数据验证和提取信息时。以下是一些常见的正则表达式模式及其用途: 1. **只能...
要检查一个字符串是否包含实数,可以使用正则表达式匹配小数点、负号和指数。 3. **复数**:MATLAB支持复数运算,并使用`+`或`-`后跟`i`或`j`来表示虚部。例如,3+4i是一个复数。在字符串中查找复数时,我们需要...
4. **字符串解析**:从输入的字符串中提取符合特定句法的数,需要理解正则表达式或者类似的字符串处理技术。在这个问题中,需要识别并忽略非数字符,然后捕获整数和小数部分。 5. **递归函数的非递归实现**:这个...
Python中常用的函数模块包括:`os`(操作系统接口)、`sys`(系统相关)、`datetime`(日期和时间处理)、`re`(正则表达式)、`json`(JSON数据格式处理)等。 Python的特色包括简洁的语法、强大的标准库、丰富的...
3. 常数:包括整数和实数(包括十进制小数形式,如1.23和指数形式如1.2e5或1.2E5) 4. 运算符:如= + - * / < <= > >= == != 等符号 5. 分隔符:; { } 等符号 程序输入/输出示例: 如源程序为C语言程序test.c: main...