题解 | #整数与IP地址间的转换#java Parse
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.math.*; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.*; import java.util.stream.*; import java.util.regex.*; import java.util.function.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String ip = in.nextLine(); String numStr = in.nextLine(); System.out.println(ip2num(ip)); System.out.println(num2ip(numStr)); } static Long ip2num(String ip) { String binaryStr = Arrays.asList(ip.split("\\.")).stream() .map(Integer::parseInt).map(i-> { String s = Integer.toBinaryString(i); String z = IntStream.range(0, 8 - s.length()) .mapToObj(c->"0").collect(Collectors.joining("")); return z + s; }).collect(Collectors.joining("")); return Long.parseLong(binaryStr, 2); } static String num2ip(String numStr) { Long num = Long.parseLong(numStr); String b = Long.toBinaryString(num); b = IntStream.range(0, 32 - b.length()) .mapToObj(c->"0").collect(Collectors.joining("")) + b; final String b2 = b; String ip = IntStream.range(0, b2.length() / 8).mapToObj(i-> { return b2.substring(i * 8, i * 8 + 8); }) .map(s->String.valueOf(Integer.parseInt(s, 2))) .collect(Collectors.joining(".")); return ip; } }