`
wangyanlong0107
  • 浏览: 486531 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】Java判断是否是整数,小数或实数的正则表达式

    博客分类:
  • java
 
阅读更多

经常会遇到这样的情况,需要判断一个字符串是否是一个合法的数,包括整数,小数或者实数。

    网上查到很多文章大多是判断这个字符串是否全为数字,比如下面这段来自StringUtils的代码,可以看到,13.2这样的数字实际上会返回false,可是,他的确是一个数字。

 

[java] view plaincopy
 
 
 
  1. public static boolean isNumeric(String str) {  
  2.         if (str == null) {  
  3.             return false;  
  4.         }  
  5.         int sz = str.length();  
  6.         for (int i = 0; i < sz; i++) {  
  7.             if (Character.isDigit(str.charAt(i)) == false) {  
  8.                 return false;  
  9.             }  
  10.         }  
  11.         return true;  
  12.     }  

   当然,网上还能查到很多其他方式,诸如用正则表达式判断是否0-9,用字符ascii码判断是否是数字以及用Double.parseDouble()是否抛出异常来判断是否为数字。

 

   事实上,除了最后一种方式能达到我们的要求,其他的都很难真正做到类似的判断。但是最后一种方式也很难区别出到底是正整数,负整数,正小数还是负小数,而且,捕获异常的方式实在是有些难看。

   基于此原因,我自己写了一个工具类,专门用作数的检测,目前能够检测正整数,负整数,整数,正小数,负小数,小数以及实数,采用的仍然是正则表达式的方式,当然,如果有遗漏或者错误,欢迎联系我以便更正,同时也欢迎修改或使用这些代码以便符合你的应用场景。

   可以简单讲下正则的思想以便修改,

   1. 对于正整数而言,可以带+号,第一个数字不能为0

   2. 对于负整数而言,必须带负号,第一个数字也不能为0

   3. 对于整数而言,实际是由0,正整数和负整数组成的,所以偷个懒用前两个方法一起判断

   4. 对于正小数而言,可以考带+号,并考虑两种情况,第一个数字为0和第一个数字不为0,第一个数字为0时,则小数点后面应该不为0,第一个数字不为0时,小数点后可以为任意数字

   5. 对于负小数而言,必须带负号,其余都同上

   6. 对于小数,可以带正负号,并且带小数点就行了,但是至少保证小数点有一边不为空,所以这里还是分左边不为空和右边不为空的情况

   7. 实数比较简单,,要么是整数,要么是小数

 

[java] view plaincopy
 
 
 
  1. package com.sap.cesp.creditinsight.web.app.util;  
  2.   
  3. import java.util.regex.Matcher;  
  4. import java.util.regex.Pattern;  
  5.   
  6. public class NumberValidationUtils {  
  7.       
  8.     private static boolean isMatch(String regex, String orginal){  
  9.         if (orginal == null || orginal.trim().equals("")) {  
  10.             return false;  
  11.         }  
  12.         Pattern pattern = Pattern.compile(regex);  
  13.         Matcher isNum = pattern.matcher(orginal);  
  14.         return isNum.matches();  
  15.     }  
  16.   
  17.     public static boolean isPositiveInteger(String orginal) {  
  18.         return isMatch("^\\+{0,1}[1-9]\\d*", orginal);  
  19.     }  
  20.   
  21.     public static boolean isNegativeInteger(String orginal) {  
  22.         return isMatch("^-[1-9]\\d*", orginal);  
  23.     }  
  24.   
  25.     public static boolean isWholeNumber(String orginal) {  
  26.         return isMatch("[+-]{0,1}0", orginal) || isPositiveInteger(orginal) || isNegativeInteger(orginal);  
  27.     }  
  28.       
  29.     public static boolean isPositiveDecimal(String orginal){  
  30.         return isMatch("\\+{0,1}[0]\\.[1-9]*|\\+{0,1}[1-9]\\d*\\.\\d*", orginal);  
  31.     }  
  32.       
  33.     public static boolean isNegativeDecimal(String orginal){  
  34.         return isMatch("^-[0]\\.[1-9]*|^-[1-9]\\d*\\.\\d*", orginal);  
  35.     }  
  36.       
  37.     public static boolean isDecimal(String orginal){  
  38.         return isMatch("[-+]{0,1}\\d+\\.\\d*|[-+]{0,1}\\d*\\.\\d+", orginal);  
  39.     }  
  40.       
  41.     public static boolean isRealNumber(String orginal){  
  42.         return isWholeNumber(orginal) || isDecimal(orginal);  
  43.     }  
  44.   
  45. }  
分享到:
评论

相关推荐

    详解Java判断是否是整数,小数或实数的正则表达式

    主要介绍了详解Java判断是否是整数,小数或实数的正则表达式,非常具有实用价值,需要的朋友可以参考下。

    JavaScript 正则表达式 验证整数、小数、实数、有效位小数最简单

    验证数字最简单正则表达式大全 输入完按回车后即可验证!(自认为最简单!) 正整数: 负整数: 整 数: 正小数: 负小数: 小 数: 实 数: 保留1位小数: 保留2位小数: 保留3位小数: [Ctrl+A...

    C#中的常用正则表达式总结

    在C#编程中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于模式匹配、查找、替换和验证输入数据。以下是对C#中常用正则表达式的总结: 1. **只能输入数字**:`^[0-9]*$` - 这个正则表达式确保...

    最强的正则表达式应用

    在上述代码中,展示了几个基于正则表达式的JavaScript函数,用于检查输入的字符串是否符合特定的数值类型,包括数字、自然数、整数和实数。下面我们将详细解释这些函数及其所使用的正则表达式。 1. `strlen` 函数:...

    最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式

    主要介绍了最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式,其中包含保留1位小数、保留2位小数、保留3位小数等正则,需要的朋友可以参考下

    正则表达式实用例子

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。它由特殊的字符序列组成,这些序列定义了要查找的模式。以下是一些常见的正则表达式实例及其用途: 1. 验证用户名和密码:`"^[a-...

    正则表达式

    正则表达式是一种强大的文本处理工具,它用于在字符串中进行模式匹配和查找、替换等操作。在编程语言和文本编辑器中广泛使用,特别是在数据验证和提取信息时。以下是一些常见的正则表达式模式及其用途: 1. **只能...

    matlab开发-查找编号字符串

    要检查一个字符串是否包含实数,可以使用正则表达式匹配小数点、负号和指数。 3. **复数**:MATLAB支持复数运算,并使用`+`或`-`后跟`i`或`j`来表示虚部。例如,3+4i是一个复数。在字符串中查找复数时,我们需要...

    吉林大学20031

    4. **字符串解析**:从输入的字符串中提取符合特定句法的数,需要理解正则表达式或者类似的字符串处理技术。在这个问题中,需要识别并忽略非数字符,然后捕获整数和小数部分。 5. **递归函数的非递归实现**:这个...

    Python程序设计课后习题答案-第一单元.docx

    Python中常用的函数模块包括:`os`(操作系统接口)、`sys`(系统相关)、`datetime`(日期和时间处理)、`re`(正则表达式)、`json`(JSON数据格式处理)等。 Python的特色包括简洁的语法、强大的标准库、丰富的...

    北京林业大学编译原理实验一(词法分析)

    3. 常数:包括整数和实数(包括十进制小数形式,如1.23和指数形式如1.2e5或1.2E5) 4. 运算符:如= + - * / &lt; &lt;= &gt; &gt;= == != 等符号 5. 分隔符:; { } 等符号 程序输入/输出示例: 如源程序为C语言程序test.c: main...

Global site tag (gtag.js) - Google Analytics