gpt4 book ai didi

Java 字符串范围内的整数

转载 作者:行者123 更新时间:2023-12-02 10:52:06 24 4
gpt4 key购买 nike

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

例如。

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

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

最佳答案

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

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
<小时/>

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

关于Java 字符串范围内的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52091608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com