题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.util.*;
import java.util.stream.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String a = in.nextLine();
System.out.println(toTen(a));
String b = in.nextLine();
System.out.println(toIp(b));
}
}
private static String toTen(String a) {
//.前面加上两个反斜杠的原因是.在正则里面是特殊字符
String binaryStr = Arrays.asList(a.split("\\."))
.stream()
.map((s->String
//十进制转成二进制,逗号分隔之后不足八位补空格
.format("%8s", Integer.toBinaryString(Integer.valueOf(s)))
//将空格换为0
.replace(" ", "0")))
.collect(Collectors.joining(""));
//二进制转换成十进制
return Long.valueOf(binaryStr, 2).toString();
}
private static String toIp(String b) {
//十进制转成二进制 不足32位补零
String binary = String.format("%32s",
Long.toBinaryString(Long.valueOf(b))).replace(" ", "0");
String toIp = IntStream.range(0, 4).mapToObj(i->binary.substring(i * 8,
(i + 1) * 8)).map(s->Integer.parseInt(s,
2) + "").collect(Collectors.joining("."));
return toIp;
}
}
