读入String类型的ip地址,几种处理方式如下:
1. ip分段,不足三位处补0
String myIp = "200.22.22.228";
//先对每段ip追加两个0,再保留后三位,从而将ip地址转换为每段3位的格式
myIp = myIp.replaceAll("(\\d{1,3})", "00$1");
myIp = myIp.replaceAll("0*(\\d{3})", "$1");
System.out.println(myIp);
public String removeZero(String ip) {
if(ip != "") {
String[] ss = ip.split("\\.");
ip = "";
for(int i = 0; i < ss.length; i++) {
ip += ss[i].replaceAll("^[0]+", "");//或采用ip转成int再转回来
if(i != ss.length - 1) {
ip += ".";
}
}
}
return ip;
}
3. String型ip转换为对应的32位long型数
public long getLongIp(String ip) {
long longIp = 0;
if(ip != "") {
String[] ss = ip.split("\\.");
for(int i = 0; i < ss.length; i++) {
//移位运算一定要加()!!
longIp = (longIp<<8) + Integer.parseInt(ss[i]);
}
}
return longIp;
}
或利用scanner直接读取long
public long getLongIp2(String ip) {
Scanner sc = new Scanner(ip).useDelimiter("\\.");
return (sc.nextLong()<<24) + (sc.nextLong()<<16) + (sc.nextLong()<<8) + (sc.nextLong());
}
4. 遍历某个ip段内所有ip地址(重要)
将ip转为Int型数组,每段代表一个0-255的数,对数组进行循环进位操作
public Object[] getAllIp(String startIp, String endIp) {
ArrayList<String> ips = new ArrayList<String>();
String[] astartIp = startIp.split("\\.");
String[] aendIp = endIp.split("\\.");
int[] istartIp = new int[4];
int[] iendIp = new int[4];
for (int i = 0; i < 4; i++) {
istartIp[i] = Integer.parseInt(astartIp[i]);
iendIp[i] = Integer.parseInt(aendIp[i]);
}
for (int A = istartIp[0]; A <= iendIp[0]; A++) {
for (int B = (A == istartIp[0] ? istartIp[1] : 0); B <= (A == iendIp[0] ? iendIp[1]
: 255); B++) {
for (int C = (B == istartIp[1] ? istartIp[2] : 0); C <= (B == iendIp[1] ? iendIp[2]
: 255); C++) {
for (int D = (C == istartIp[2] ? istartIp[3] : 0); D <= (C == iendIp[2] ? iendIp[3]
: 255); D++) {
ips.add(new String(A + "." + B + "." + C + "." + D));
}
}
}
}
return ips.toArray();
}