如何使 String 表现得像 Integer?
How to make String behave like Integer?
我是一个正在努力学习的新手Java。目前正在制作小程序练习
我正在尝试制作一个程序,给定用户所需的 IPV4 地址、网络掩码和子网数量,可以输出每个子网的网络 IP、主机 IP 范围和广播 IP。
问题是,我如何才能将用户给定的 IPV4 地址转换为整数,以便向其添加数字并更早地显示它?
例如:
给定 IPV4 地址:10.2.0.0/19
所需子网:40
子网 0 将从 10.2.0.0 开始到 10.2.0.127。
如何将 10.2.0.0 转换为 10.2.0.127?而从这最后一个到10.2.0.255,就是下一个子网1的ip范围。
到目前为止,我试过这个:
while(Subnet > scounter) {
String finalip = IPV4Add.substring(0, IPV4Add.length() - 1) + (MagicNum - 1);
System.out.println("Subnet " + scounter + " Net Address: " + IPV4Add + " to " + finalip);
scounter++;
}
输出(只有 3 行而不是 39 行):
Subnet 0 Net Address: 10.2.0.0 to 10.2.0.127
Subnet 1 Net Address: 10.2.0.0 to 10.2.0.127
Subnet 2 Net Address: 10.2.0.0 to 10.2.0.127
其中Subnet是用户需要的子网数,scounter是统计输出的子网,MagicNum 是应添加到 ip 以获得下一个子网的数字,在本例中为 128。
我如何编辑字符串以使其表现得像整数并给我,在每个循环中添加:
Subnet 1 Net Address: 10.2.0.128 to 10.2.0.255
Subnet 2 Net Address: 10.2.1.0 to 10.2.1.127
Subnet 3 Net Address: 10.2.1.128 to 10.2.1.255
等等?
提前致谢。
如果我对问题的理解正确,你想输出范围之间的差等于 128 的范围列表。实现此目的的一种方法是定义一个新的加法方法,该方法将数字视为 IP 中的字段地址。
第一步是拆分 IP 地址字符串并将其存储为包含四个数字的整数数组。
String[] stringIPAddr = "10.2.0.0".split("\.");
int[] ipAddr = new int[4];
for(int j = 0; j < 4; j++) {
ipAddr[j] = Integer.parseInt(stringIPAddr[j]);
}
这个问题的范围定义得很好。它们都以 0 开始,以 127 结束。下一个范围以 128 开始,以 255 结束。以下函数负责跳转到范围 in place 中的下一个值:
void nextAddr(int[] number) {
if(number[3] == 0) number[3] = 127 ;
else if(number[3] == 128) number[3] = 255;
}
在我们打印范围的第一个和最后一个值之后,我们想将它递增一个并转到下一个范围。在这里,如果最后一个字段等于 255,我们还应该注意正确地增加数字。在这种情况下,进位通过字段传播(就像常规 addition/subtraction):
void increment (int[] number) {
int carry = 1;
for(int i = 3; i >=0; i--) {
number[i] += carry;
if(number[i] == 256) {
carry = 1;
number[i] = 0;
} else carry = 0;
}
}
此函数将 IP 地址加一。如果某个字段变为 256,则该函数将该字段设置为零并将进位传播到求和运算中的下一个字段。这个想法就像常规加法一样,如果数字等于 256,则进位转到前一个字段。
有了 nextAddr 和 increment 方法,编写主循环很容易:
for(int i = 0; i < subNetWorks; i++) {
System.out.print("Subnet " + i + " Net Address:" +
Arrays.toString(ipAddr) + " to ");
nextAddr(ipAddr);
System.out.println(Arrays.toString(ipAddr));
increment(ipAddr);
}
输出:
Subnet 0 Net Address:[10, 2, 0, 0] to [10, 2, 0, 127]
Subnet 1 Net Address:[10, 2, 0, 128] to [10, 2, 0, 255]
Subnet 2 Net Address:[10, 2, 1, 0] to [10, 2, 1, 127]
Subnet 3 Net Address:[10, 2, 1, 128] to [10, 2, 1, 255]
Subnet 4 Net Address:[10, 2, 2, 0] to [10, 2, 2, 127]
Subnet 5 Net Address:[10, 2, 2, 128] to [10, 2, 2, 255]
Subnet 6 Net Address:[10, 2, 3, 0] to [10, 2, 3, 127]
为了简单起见,我避免涉及一些极端情况。例如,如果用户输入无效的 IP 地址,或者如果用户输入类似 255.255.255.0 的地址并询问下 100 个子网,会发生什么情况?
我是一个正在努力学习的新手Java。目前正在制作小程序练习
我正在尝试制作一个程序,给定用户所需的 IPV4 地址、网络掩码和子网数量,可以输出每个子网的网络 IP、主机 IP 范围和广播 IP。
问题是,我如何才能将用户给定的 IPV4 地址转换为整数,以便向其添加数字并更早地显示它?
例如:
给定 IPV4 地址:10.2.0.0/19
所需子网:40
子网 0 将从 10.2.0.0 开始到 10.2.0.127。
如何将 10.2.0.0 转换为 10.2.0.127?而从这最后一个到10.2.0.255,就是下一个子网1的ip范围。
到目前为止,我试过这个:
while(Subnet > scounter) {
String finalip = IPV4Add.substring(0, IPV4Add.length() - 1) + (MagicNum - 1);
System.out.println("Subnet " + scounter + " Net Address: " + IPV4Add + " to " + finalip);
scounter++;
}
输出(只有 3 行而不是 39 行):
Subnet 0 Net Address: 10.2.0.0 to 10.2.0.127
Subnet 1 Net Address: 10.2.0.0 to 10.2.0.127
Subnet 2 Net Address: 10.2.0.0 to 10.2.0.127
其中Subnet是用户需要的子网数,scounter是统计输出的子网,MagicNum 是应添加到 ip 以获得下一个子网的数字,在本例中为 128。
我如何编辑字符串以使其表现得像整数并给我,在每个循环中添加:
Subnet 1 Net Address: 10.2.0.128 to 10.2.0.255
Subnet 2 Net Address: 10.2.1.0 to 10.2.1.127
Subnet 3 Net Address: 10.2.1.128 to 10.2.1.255
等等?
提前致谢。
如果我对问题的理解正确,你想输出范围之间的差等于 128 的范围列表。实现此目的的一种方法是定义一个新的加法方法,该方法将数字视为 IP 中的字段地址。
第一步是拆分 IP 地址字符串并将其存储为包含四个数字的整数数组。
String[] stringIPAddr = "10.2.0.0".split("\.");
int[] ipAddr = new int[4];
for(int j = 0; j < 4; j++) {
ipAddr[j] = Integer.parseInt(stringIPAddr[j]);
}
这个问题的范围定义得很好。它们都以 0 开始,以 127 结束。下一个范围以 128 开始,以 255 结束。以下函数负责跳转到范围 in place 中的下一个值:
void nextAddr(int[] number) {
if(number[3] == 0) number[3] = 127 ;
else if(number[3] == 128) number[3] = 255;
}
在我们打印范围的第一个和最后一个值之后,我们想将它递增一个并转到下一个范围。在这里,如果最后一个字段等于 255,我们还应该注意正确地增加数字。在这种情况下,进位通过字段传播(就像常规 addition/subtraction):
void increment (int[] number) {
int carry = 1;
for(int i = 3; i >=0; i--) {
number[i] += carry;
if(number[i] == 256) {
carry = 1;
number[i] = 0;
} else carry = 0;
}
}
此函数将 IP 地址加一。如果某个字段变为 256,则该函数将该字段设置为零并将进位传播到求和运算中的下一个字段。这个想法就像常规加法一样,如果数字等于 256,则进位转到前一个字段。
有了 nextAddr 和 increment 方法,编写主循环很容易:
for(int i = 0; i < subNetWorks; i++) {
System.out.print("Subnet " + i + " Net Address:" +
Arrays.toString(ipAddr) + " to ");
nextAddr(ipAddr);
System.out.println(Arrays.toString(ipAddr));
increment(ipAddr);
}
输出:
Subnet 0 Net Address:[10, 2, 0, 0] to [10, 2, 0, 127]
Subnet 1 Net Address:[10, 2, 0, 128] to [10, 2, 0, 255]
Subnet 2 Net Address:[10, 2, 1, 0] to [10, 2, 1, 127]
Subnet 3 Net Address:[10, 2, 1, 128] to [10, 2, 1, 255]
Subnet 4 Net Address:[10, 2, 2, 0] to [10, 2, 2, 127]
Subnet 5 Net Address:[10, 2, 2, 128] to [10, 2, 2, 255]
Subnet 6 Net Address:[10, 2, 3, 0] to [10, 2, 3, 127]
为了简单起见,我避免涉及一些极端情况。例如,如果用户输入无效的 IP 地址,或者如果用户输入类似 255.255.255.0 的地址并询问下 100 个子网,会发生什么情况?