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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-15 17:24
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务