- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
需要获取以 9.1.0.0-10 形式给出的所有 Ips
输出:
9.1.0.0
9.1.0.1
9.1.0.2
9.1.0.3
9.1.0.4
9.1.0.5
9.1.0.6
9.1.0.7
9.1.0.8
9.1.0.9
9.1.0.10
有没有任何类可以完成这项工作,或者有什么方法我可以更好地做到这一点
我的java代码:
String start = "9.1.0.0-10";
String range[] = start.split("-");
String[] startParts = range[0].split("(?<=\\.)(?!.*\\.)");
int first = Integer.parseInt(startParts[1]);
int last = Integer.parseInt(range[1]);
for(int i=first;i<=last;i++)
System.out.println(startParts[0] + i);
最佳答案
首先,我建议您先按句点分割地址范围,然后根据破折号的存在分别处理每个 token 。这样,您也可以处理像 9.1.0-5.0-10 这样的范围。
不久前我必须解决这个挑战,这导致我创建了一个 InetAddressRange
类:
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Notation: n.n.n.n, where n can be:
* - an integer such that 0 <= n <= 255;
* - an interval m-n, where 0 <= m <= n <= 255
* - an asterisk (*), synonym for interval 0-255.
* The address parts are stored as returned as 16-bits integers (short) in order to
* avoid confusion that might come from the fact that integers between 128 and 255
* are considered negative (-128 to -1) when handled as byte values.
* Instances of this class are immutable.
*/
public class InetAddressRange {
private static final Pattern P_DIGITS = Pattern.compile("\\d+");
private static final Pattern P1 = Pattern.compile("([0-9\\*\\-\\[\\],]+)\\.([0-9\\*\\-\\[\\],]+)\\.([0-9\\*\\-\\[\\],]+)\\.([0-9\\*\\-\\[\\],]+)");
private static final Pattern P2 = Pattern.compile("(\\d+)\\-(\\d+)");
private final short[] min = new short[4];
private final short[] max = new short[4];
public InetAddressRange(String expr) {
parse(expr);
}
private void parse(String expr) {
Matcher m1 = P1.matcher(expr);
if (!m1.matches()) {
throw error(expr);
}
for (int i = 0; i < 4; i++) {
String token = m1.group(i + 1);
if (P_DIGITS.matcher(token).matches()) {
// Integer between 0 and 255 (else only the last 8 bits are kept)
min[i] = max[i] = (short) (Integer.parseInt(token) & 0xff);
} else if (token.equals("*")) {
// Asterisk = interval 0-255
min[i] = 0;
max[i] = 0xff;
} else {
// Interval a-b
Matcher m2 = P2.matcher(token);
if (m2.matches()) {
min[i] = (short) (Integer.parseInt(m2.group(1)) & 0xff);
max[i] = (short) (Integer.parseInt(m2.group(2)) & 0xff);
} else {
throw error(expr);
}
}
}
}
private static IllegalArgumentException error(String expr) {
return new IllegalArgumentException("The expression " + expr + " isn't a valid IP address interval.");
}
public short getMin(int i) {
return min[i];
}
public short getMax(int i) {
return max[i];
}
public boolean isInRange(InetAddress adr) {
byte[] parts = adr.getAddress();
for (int i = 0; i < 4; i++) {
if (min[i] > (parts[i] & 0xff) || max[i] < (parts[i] & 0xff)) {
return false;
}
}
return true;
}
public boolean isInRange(String adr) {
String[] tokens = adr.split("\\.");
if (tokens.length < 4) {
return false;
}
for (int i = 0; i < 4; i++) {
int part = Integer.parseInt(tokens[i]);
if (min[i] > part || max[i] < part) {
return false;
}
}
return true;
}
public List<String> getAddresses() {
List<String> addrs = new ArrayList<>();
for (short a = min[0]; a <= max[0]; a++) {
for (short b = min[1]; b <= max[1]; b++) {
for (short c = min[2]; c <= max[2]; c++) {
for (short d = min[3]; d <= max[3]; d++) {
String addr = String.format("%d.%d.%d.%d", a, b, c, d);
addrs.add(addr);
}
}
}
}
return addrs;
}
public static void main(String[] args) {
InetAddressRange range = new InetAddressRange("9.1.0.0-10");
range.getAddresses().forEach(System.out::println);
}
}
getAddresses()
方法将生成您需要的地址(有关示例,请参阅 main()
方法)。
干杯,
杰夫
关于java - 获取java中以 "9.1.0.0-10"形式给出的Ip地址范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33122123/
我在使用带有 vector STL 的迭代器时遇到了这个错误。 代码:- #include #include void print_vec(std::vector vec) { auto
JAVA:两个引用“p”&&“pp”之间有区别吗? PrintStream p = new PrintStream(System.out); p.println("lol");
我尝试从主分支中拉出,但收到错误消息: $ git --no-optional-locks -c color.branch=false -c color.diff=false -c color.sta
我面临着一个让我抓狂的问题! 我有一个函数,这个: void load_weapons3(t_env *e, char *name, int x, t_weapon *w) { char
我正在尝试使用 CUDA 中的最小值、最大值、总和和平均值实现并行归约。 这是我目前的主要代码片段。 int main() { const auto count = 8; const
我知道 double free 或 corruption 错误通常是对 big 3 的违规,但在这种情况下,我找不到违规发生的地方。我有一个复制构造函数、析构函数和赋值运算符,适用于任何处理指针的东西
GTK+ 中的“focus”和“focus-in(out)-event”信号有什么区别?哪个先发射?它们与键盘(TAB)和鼠标点击有什么关系。他们互相依赖吗? 我问这个是因为我想在顶层窗口中跟踪当前聚
*** glibc detected *** /home/ghoshs/workspace/Simulator/Debug/Simulator: double free or corruption (
#include #include #include #include using namespace std; #define MAX_WEIGHT 1000000 class Set {
我在服务器上有两个分支一个叫 R2 的分支和一个叫 DEV 的分支我无意中登录了错误的服务器,进入了存储库并执行了GIT pull 源开发但是存储库在 R2 上。所以我意识到我的错误然后尝试通过做一个
我有一个包含循环的大约 1000 个顶点和 3000 个边的有向图。 我试图从给定的顶点找到所有下游(出)路径。 使用以下 Gremlin 查询时 g.V(45712).repeat(out().si
使用 Delphi XE 2 我试图确定缩放方向以将缩放效果应用于图像(TImage),但没有找到执行此操作的函数,并且图像的 OnGesture 事件中的 EventInfo 属性没有此信息. 我见
我正在尝试创建一个 Zoom_image 函数,它使用离散傅里叶变换来缩放灰度图像。如果图像大小小于或等于 4*4 但大小增加,我包含的代码可以工作。它给出“双重释放或损坏(出)中止(核心转储)”错误
当我执行 popAll 函数时,出现以下错误: 双重释放或腐败(出)中止(核心转储) 我想我已经将错误来源缩小到了这个函数。 IntegerStack 是我制作的一个简单的 ADT,其中包含一个名为
我有网络开发背景,我正在尝试创建类似于 this technique 的东西适用于 iOS(使用 Cocoa/Obj C)。我在谷歌搜索资源时遇到了很多困难,因为 iOS 中的“视差”往往指的是 iO
我想实现一个 faceted search对于我的一个项目。我正在使用 PHP5、Mysql 和 Symfony 1.4。显然社区指向Apache Solr这似乎正是我想要完成的。 问题是该网站将在不
我知道有 questions floating around当您没有提供明确的分支名称时,关于来自特定分支的 git pull,但是我想知道即使用户确实指定了不同的分支,是否也可以强制 pull 分支
我正在尝试将我的更改推送到 NAS 上的存储库。它以我无法理解的方式失败。 documentation声明默认情况下 push 仅适用于快进更新。很公平。所以我做了一个 git pull(我的 Rem
我刚开始使用 Oracle 的 Coherence 缓存,我注意到这一点:如果我在缓存中放入一个 ConcurrentHashMap 对象,当我检索它时,我可以看到它被转换为一个普通的 HashMap
我尝试创建一个连接到数据库的线程,从那里获取一些数据并打印到控制台。问题是当该线程完成时抛出异常: 双重免费或腐败(出局)中止(核心转储) 我尝试使用 sqlite3 和 pthread,但这两个并不
我是一名优秀的程序员,十分优秀!