题解 | #整数与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; } }