字符串范围内的Java整数

时间:2018-08-30 07:38:36

标签: java

所以我有一个字符串,指定了有效的数字范围。

例如。

String range = "100-200 , 500 , 1000-1200";

需要检查给定的整数值是否在此指定范围内 范围每次都不同。

1 个答案:

答案 0 :(得分:1)

您应该首先分隔不同的范围。有效范围似乎是用逗号分隔的,因此您需要用,分开。

String[] ranges = range.split(" , ");

然后对于每个范围,您都需要将其用连字符分隔。作为Stultuske pointed out,您必须考虑到连字符本身可以是整数符号的一部分的事实。如果只期望正值,则可以用单个连字符分开:

String rangeStr = "400-600";
String parts = rangeStr.split("-");

或者,如果期望也为负值,则应按不在字符串开头的第一个连字符进行拆分,并仅应用一次拆分。

String rangeStr = "-1200--1000";
// Splits by hyphen which is not preceded by the start of the string.
// The resulting array has no more than two elements
String[] parts = rangeStr.split("(?<!^)-", 2);

请注意,如果仅给出一个值而不是一个范围(例如, 500。那么,当然parts.length1

然后您可以通过调用Integer.valueOf(...)来获取整数。


这是包装在静态方法中的代码:

public static boolean inRange(String range, int value) {
    return Arrays.stream(range.split(" , "))
        .anyMatch(t -> {
            // Split the two integers denoting the range. The length of the
            // array is 1 if the range is an exact value (500 in your case),
            // otherwise, its length is 2
            String[] parts = t.split("(?<!^)-", 2);
            int minVal = Integer.valueOf(parts[0]);
            int maxVal = (parts.length == 2 ? Integer.valueOf(parts[1]) : minVal);
            return (minVal <= value && value <= maxVal);
        });
    }
}

下面是一些测试:

String range = "-2100--2000, 100-200, 500, 1000-1200, 2000-2100";
System.out.println(inRange(range, -2150)); // false
System.out.println(inRange(range, -2000)); // true
System.out.println(inRange(range, 400));   // false
System.out.println(inRange(range, 500));   // true
System.out.println(inRange(range, 1100));  // true

请注意,我假设源字符串的格式正确。如果您想更宽容所期望的源字符串(例如,中间的多个空格的尾部空格),则必须自己实现。