Java 如何使字符串表现为整数?

Java 如何使字符串表现为整数?,java,string,integer,ip,transform,Java,String,Integer,Ip,Transform,我是一个试图学习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

我是一个试图学习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是用户所需的子网数量,sconterto是对输出的子网进行计数,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]);
}
打印范围的第一个和最后一个值后,我们希望将其递增一,然后转到下一个范围。在这里,如果最后一个字段等于255,我们还应该小心正确地增加数字。在这种情况下,进位通过字段传播(就像常规的加减法):

此函数将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);
    }

为了简单起见,有几个角落的案例是我避免讨论的。例如,如果用户输入了无效的IP地址,或者用户输入了类似于:255.255.255.0的地址并要求提供接下来的100个子网,会发生什么情况?

谢谢,您解释得很好。@xypher如果有助于您更近距离,请接受答案。干杯谢谢,split()方法给了我一些想法。
void nextAddr(int[] number) {
    if(number[3] == 0) number[3] = 127 ;
    else if(number[3] == 128) number[3] = 255;
}
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;
    }
}
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]