一、题目描述
1、将string类型的IP地址转化成int。
2、将int类型数转化成string类型的IP地址。
二、代码实现
见我的github:TransIPtoInt
三、解题思路:首先是通过正则表达式对输入的string类型的IP地址进行判断,分割字符串进行累加(见注意事项),输出。
1)正则表达式对输入的string类型的IP地址进行判断。
2)分割字符串进行累加。
2.1)首先通过String.split("\\."),将字符串按照"."分开。
2.2)对于分开后的每个小字符串,判断是否小于255(这一点,正则表达式无法做到)。
2.3)然后按位右移相应的位数,并相加。
3)将int类型数转化成string类型的IP地址。
三、注意事项
1)String regular = "^[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}$";匹配的是数字开头,数字结尾,数字位数在1-3之间,且数字间含有"."分开的字符串。
2)如果用“.”作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
3)考虑到int类型的最大长度为32位,在计算的时候会出现问题,因此乘积选用long类型来存储 。
四、测试用例
//正案例
private String demoIPString01 = "0.0.0.0";
private long demoIPint01 = 0;
private String demoIPString02 = "255.255.255.255";
private long demoIPint02 = 4294967295l;
private String demoIPString03 = "255.0.0.255";
private long demoIPint03 = 4294967295l - 16777215l + 255l;
private String demoIPString04 = "0.0.0.1";
private long demoIPint04 = 1;
private String demoIPString05 = "255.255.255.254";
private long demoIPint05 = 4294967294l;
private String demoIPString06 = "0.0.0.255";
private long demoIPint06 = 255;
private String demoIPString07 = "0.0.1.0";
private long demoIPint07 = 256;
private String demoIPString08 = "25.36.15.15";
private long demoIPint08 = 421793551;
//反案例
private String demoIPString101 = "256.0.0.0";
private long demoIPint101 = -1;
private String demoIPString102 = "1.2.255.256";
private long demoIPint102 = -1;
private String demoIPString103 = "256.0.k.0";
private long demoIPint103 = -1;
五、效果展示