您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何使用Java判定一個數(shù)值是否在指定的開閉區(qū)間范圍內”,在日常操作中,相信很多人在如何使用Java判定一個數(shù)值是否在指定的開閉區(qū)間范圍內問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用Java判定一個數(shù)值是否在指定的開閉區(qū)間范圍內”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
對于開閉區(qū)間,在數(shù)學中的表示方式通常為 () 和 [],小括號代表開放區(qū)間,中括號代表封閉區(qū)間,而它們的區(qū)別主要在于是否包含 = 等于號,開閉區(qū)間通常會分為以下一些情形:
(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來判定一個數(shù)值是否在指定的開閉區(qū)間范圍內呢?可以按照以下的思路去實現(xiàn):
由于開閉區(qū)間是有一定規(guī)則的,所以開閉區(qū)間必須是合法的,除了(、)、[、]、, 、數(shù)字 之外,其他的字符都是不合法的,所以首先需要校驗開閉區(qū)間的合法性;
判定開閉區(qū)間合法后,再拆分出開閉區(qū)間的最小值和最大值;
根據開閉區(qū)間是否包含[],從而在判斷時看是否需要添加 = 號;
開閉區(qū)間的合法性可以通過正則表達式進行驗證,具體正則表達式如下:
/** * 開閉區(qū)間正則表達式 */ private static final Pattern NUM_RANGE_PATTERN = Pattern.compile("[\\[|\\(]\\s?\\d+\\s?,\\s?\\d+\\s?[\\)|\\]]");
左半開閉區(qū)間的合法性正則表達式如下:
/** * 左半區(qū)間正則表達式 */ private static final Pattern LEFT_NUM_RANGE_PATTERN = Pattern.compile("[\\[|\\(]\\s?\\d+\\s?,\\s?[\\)|\\]]");
右半開閉區(qū)間的合法性正則表達式如下:
/** * 右半區(qū)間正則表達式 */ private static final Pattern RIGHT_NUM_RANGE_PATTERN = Pattern.compile("[\\[|\\(],\\s?\\d+\\s?[\\)|\\]]");
判斷開閉區(qū)間的函數(shù)方法代碼如下:
/** * 判斷是否為有效的數(shù)字區(qū)間范圍 * @param numRange 數(shù)字區(qū)間 * @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(); }
/** * 判斷數(shù)值是否在區(qū)間范圍內 * @param number 數(shù)值 * @param numRange 開閉區(qū)間 * @return boolean */ public static boolean inNumRange(int number, String numRange) { Objects.requireNonNull(numRange); if (!isValidNumRange(numRange)) { return false; } String[] pairs = numRange.split(","); // 獲取開閉區(qū)間的最小值和最大值 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)); // 判定數(shù)值是否大于最小值 boolean minMatched = (minValue == null) || (pairs[0].startsWith("[") ? number >= minValue : number > minValue); // 判定數(shù)值是否小于最大值 boolean maxMatched = (maxValue == null) || (pairs[1].endsWith("]") ? number <= maxValue : number < maxValue); return minMatched && maxMatched; }
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判定一個數(shù)值是否在指定的開閉區(qū)間范圍內”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。