引言

对于开闭区间,在数学中的表示方式通常为 () 和 [],小括号代表开放区间,中括号代表封闭区间,而它们的区别主要在于是否包含 = 等于号,开闭区间通常会分为以下一些情形:

  • (1, 10):代表 1 < x < 10;
  • (1, 10]:代表 1 < x <= 10;
  • [1, 10]:代表 1 <= x <= 10;
  • [1, 10):代表 1 <= x < 10;
  • (1, ) 或 (1, ]:代表 x > 1;
  • [1, ] 或 [1, ):代表 x >= 1;
  • (, 10) 或 [, 10):代表 x < 10;
  • (, 10] 或 [, 10]:代表 x <= 10;

那么如何使用Java来判定一个数值是否在指定的开闭区间范围内呢?可以按照以下的思路去实现:

  • 由于开闭区间是有一定规则的,所以开闭区间必须是合法的,除了(、)、[、]、, 、数字 之外,其他的字符都是不合法的,所以首先需要校验开闭区间的合法性;
  • 判定开闭区间合法后,再拆分出开闭区间的最小值和最大值;
  • 根据开闭区间是否包含[],从而在判断时看是否需要添加 = 号;

1、开闭区间的合法性校验

开闭区间的合法性可以通过正则表达式进行验证,具体正则表达式如下:

/**
 * 开闭区间正则表达式
 */
private static final Pattern NUM_RANGE_PATTERN = Pattern.compile("[\\[|\\(]\\s?\\d \\s?,\\s?\\d \\s?[\\)|\\]]");

左半开闭区间的合法性正则表达式如下:

/**
 * 左半区间正则表达式
 */
private static final Pattern LEFT_NUM_RANGE_PATTERN = Pattern.compile("[\\[|\\(]\\s?\\d \\s?,\\s?[\\)|\\]]");

右半开闭区间的合法性正则表达式如下:

/**
 * 右半区间正则表达式
 */
private static final Pattern RIGHT_NUM_RANGE_PATTERN = Pattern.compile("[\\[|\\(],\\s?\\d \\s?[\\)|\\]]");

判断开闭区间的函数方法代码如下:

/**
 * 判断是否为有效的数字区间范围
 * @param numRange 数字区间
 * @return boolean
 */
public static boolean isValidNumRange(String numRange) {
    return NUM_RANGE_PATTERN.matcher(numRange).matches()
            || LEFT_NUM_RANGE_PATTERN.matcher(numRange).matches()
            || RIGHT_NUM_RANGE_PATTERN.matcher(numRange).matches();
}

2、判定方法

/**
 * 判断数值是否在区间范围内
 * @param number 数值
 * @param numRange 开闭区间
 * @return boolean
 */
public static boolean inNumRange(int number, String numRange) {
    Objects.requireNonNull(numRange);

    if (!isValidNumRange(numRange)) {
        return false;
    }

    String[] pairs = numRange.split(",");

    // 获取开闭区间的最小值和最大值
    List<String> rangeNums = Arrays.stream(pairs).map(str -> str.replaceAll("[(|)|\\[|\\]]", "").trim()).collect(Collectors.toList());
    Integer minValue = "".equals(rangeNums.get(0)) ? null : Integer.valueOf(rangeNums.get(0));
    Integer maxValue = "".equals(rangeNums.get(1)) ? null : Integer.valueOf(rangeNums.get(1));

    // 判定数值是否大于最小值
    boolean minMatched = (minValue == null) || (pairs[0].startsWith("[") ? number >= minValue : number > minValue);
    // 判定数值是否小于最大值
    boolean maxMatched = (maxValue == null) || (pairs[1].endsWith("]") ? number <= maxValue : number < maxValue);

    return minMatched && maxMatched;
}

3、测试验证

public static void main(String[] args) {
        System.out.println(inNumRange(1, "(0, 2]"));
        System.out.println(inNumRange(1, "(, 2]"));
        System.out.println(inNumRange(1, "(1, 4]"));
        System.out.println(inNumRange(1, "(0, ]"));
    }

运行程序,输出如下结果:

true
true
false
true

总结

到此这篇关于使用Java判定一个数值是否在指定的开闭区间范围内的文章就介绍到这了,更多相关Java判定数值在开闭区间范围内内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

使用Java判定一个数值是否在指定的开闭区间范围内的更多相关文章

  1. vue中输入框事件的使用及数值校验方式

    这篇文章主要介绍了vue中输入框事件的使用及数值校验方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. JavaScript数值类型知识汇总

    这篇文章主要给大家介绍了关于JavaScript数值类型知识汇总的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JavaScript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

  3. 使用Java判定一个数值是否在指定的开闭区间范围内

    这篇文章主要给大家介绍了关于使用Java判定一个数值是否在指定的开闭区间范围内的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友可以参考下

  4. 超好玩js页面效果之实现数值的动态变化

    这篇文章主要给大家介绍了关于超好玩js页面效果之实现数值的动态变化的相关资料,文中通过示例代码及图文介绍的非常详细,对大家学习或者使用js具有一定的参考学习价值,需要的朋友可以参考下

  5. element ui的el-input-number修改数值失效的问题及解决

    这篇文章主要介绍了element ui的el-input-number修改数值失效的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  6. Python数值方法及数据可视化

    这篇文章主要介绍了Python数值方法及数据可视化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  7. ES6字符串和数值新增方法总结

    ES6为js新增了很多方法,包括遍历、查询、替换等等,下面这篇文章主要给大家介绍了关于ES6字符串和数值新增方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  8. laravel5.6实现数值转换

    今天小编就为大家分享一篇laravel5.6实现数值转换,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  9. 详解python数值与字符串高级用法

    这篇文章主要介绍了python数值与字符串高级用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  10. python判定文件目录是否存在及创建多层目录

    这篇文章主要介绍了python判定文件目录是否存在及创建多层目录,文章通过os模块、try语句、pathlib模块善终模块展开详细的内容,感兴趣的朋友可以参考一下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部